【发布时间】:2022-01-15 22:16:09
【问题描述】:
如果我有以下代码,这是一个带有值模板的结构,
enum FakeEnum
{
FakeNone,
Fake1,
Fake2,
Fake3,
Fake4,
Fake5,
Fake6,
Fake7,
Fake8,
Fake9,
Fake10,
Fake11,
Fake12,
Fake13,
Fake14,
Fake15,
Fake16,
Fake17,
// ...
Fake100,
};
template<FakeEnum FE>
struct FakeStruct
{
void FakeIt();
};
template<FakeEnum FE>
void FakeStruct<FE>::FakeIt()
{
std::cout << "void FakeStruct<" << FE << ">::FakeIt()";
}
template<>
void FakeStruct<Fake12>::FakeIt()
{
std::cout << "specialized on Fake12";
}
template<>
void FakeStruct<Fake14>::FakeIt()
{
std::cout << "specialized on Fake14";
}
template<>
void FakeStruct<Fake23>::FakeIt()
{
std::cout << "specialized on Fake23";
}
...
...但我真正想写的是类似的东西
template<>
void FakeStruct<Fake12 || Fake13 || Fake14 or how do I do this???>::FakeIt()
{
std::cout << "specialized on Fake12, Fake13, and Fake14";
}
是否有某种类似于 SFINAE 的方式来编写 FakeStruct<>::FakeIt() 特化而不为多个枚举值重复它?理想情况下不改变FakeStruct的原始声明/签名?
【问题讨论】: