У меня есть структура шаблона с несколькими параметрами шаблона
template<class Result, class T, class K>
struct MyClass
{
public:
Result foo()
{
return Result{};
}
};
Эта структура отлично работает для всех шаблонов, кроме случая, когда Result void.Я понимаю, что Result{}
не может быть реализован для типа void, поэтому мое текущее решение состоит в том, чтобы использовать частичную специализацию, подобную этой:
template<class T, class K>
struct MyClass<void, T, K>
{
public:
void foo()
{
return;
}
};
Это позволяет делать следующее:
int main()
{
MyClass<void, double, char> mycl1;
MyClass<int, double, char> mycl2;
mycl1.foo();
mycl2.foo();
}
Есть ли способ заставить mycl1.foo()
компилироваться без частичной специализации класса в стандарте C ++ 14?Я мог бы использовать if constexr
и комбинацию типа trait is_void_v
, но я хочу найти, если есть способ: