我有一个Test
类,它是在两个相同枚举类型的枚举上模板化的。我正在尝试为这个Test
类写一个特殊化,当两个枚举值相同时。
enum class Enum
{
A,
B
};
template <Enum ENUM_1, Enum ENUM_2>
class Test {};
template <Enum ENUM>
class Test<ENUM, ENUM> {};
int main()
{
Test<Enum::A> test;
}
但是,上述操作会导致以下错误:
main.cpp:23:5: error: too few template arguments for class template 'Test'
Test<Enum::A> test;
^
main.cpp:13:7: note: template is declared here
class Test
^
1 error generated.
上面的代码有什么问题?
2条答案
按热度按时间lpwwtiir1#
Test
正好需要两个模板参数。专用化不会移除ENUM_2
。如果要使用单个类型示例化Test
,并将其用于ENUM_2
,则可以为ENUM_2
定义默认值:sd2nnvve2#
从已接受的回答中列出解决方案,以防其对他人有帮助:
打印输出