yi *_*uce 2 c++ templates concept
我想创建模板类来获取具有相同类的引用类型和非引用类型模板类,如下所示
\n template <typename T> requires (std::is_reference_v<T>)\n struct RRR\n {\n T m_value{};\n RRR(T init) : m_value{ init }\n {}\n };\n\n template <typename T> requires (!std::is_reference_v<T>)\n struct RRR\n {\n T m_value{};\n RRR(T init) : m_value{ init }\n {}\n };\nRun Code Online (Sandbox Code Playgroud)\n但是当我使用它时,我遇到了下面的编译错误。
\n错误:重新声明 \xe2\x80\x98template 需要具有不同约束的 is_reference_v struct RRR\xe2\x80\x99
\n像这种情况定义模板的解决方案是什么?
\n使它们部分专业化:
template <typename T>
struct RRR;
template <typename T> requires (std::is_reference_v<T>)
struct RRR<T>
{
T m_value{};
RRR(T init) : m_value{ init }
{}
};
template <typename T> requires (!std::is_reference_v<T>)
struct RRR<T>
{
T m_value{};
RRR(T init) : m_value{ init }
{}
};
Run Code Online (Sandbox Code Playgroud)
您甚至可以将其中一个作为部分专业化,另一个作为主要模板:
template <typename T>
struct RRR
{
T m_value{};
RRR(T init) : m_value{ init }
{}
};
// This one will be used for references since it is more constrained
template <typename T> requires (std::is_reference_v<T>)
struct RRR<T>
{
T m_value{};
RRR(T init) : m_value{ init }
{}
};
Run Code Online (Sandbox Code Playgroud)