template <int C> class MyClass;
...
template <int C>
double trans(MyClass<C> &a)
{
//return some double
}
//this is supposed to be function template
template <int C>
double func(MyClass<2> &a)
{
//return some double
}
template <int C>
MyClass<C-1> func(MyClass<C> &a)
{
MyClass<C-1> ret;
return ret;
}
template <int C>
double otherFunc(MyClass<C> &a)
{
double result;
if(C == SOME_CONSTANT)
result = func(a);
else
result = trans(func(a));
}
Что моя проблема, я хочу, чтобы проверить аргумент шаблона C в параметре otherFunc
шаблона функции вызова func
(вернуться дважды) вместо функции члена шаблона класса func
(возврат MyClass). Но почему-то компилятор попытки func
, который возвращает MyClass вC++, используя шаблон функции в шаблоне класса
if(C == SOME_CONSTANT)
result = func(a);
эту часть, так что я получил ошибку компиляции (потому что двойной = MyClass не является жизнеспособным). Как мне исправить эту проблему?
'otherFunc' должен быть законным компилировать для значений' C' это экземплярам с - что * включает в себя * филиал в 'if' /' else', который никогда не может быть использован для этого значения 'C'. Другими словами, даже если 'SOME_CONSTANT'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' , Как исправить? - вы можете избежать 'if' /' else' с помощью havnig общего шаблона 'otherFunc' для' C! = 2' и специализации для '2'. Не совсем понятно, что вы действительно пытаетесь достичь, хотя ... –
Я просто хочу, чтобы 'func' вел себя немного иначе, чем C == 2. Я был бы признателен, если бы вы могли разработать бит больше – REALFREE