template <typename IN,typename OUT,bool isVector>
OUT foo(IN x){
if (isVector){
return x[0];
} else {
return x;
}
}
После запроса this question Я ошибочно предположил, что приведенный выше код может быть скомпилирован, например.Как исправить этот шаблон:
foo<double,double,false>;
, а также
foo<std::vector<double>,double,true>;
Однако, даже если один из, если ветвей никогда не запускается на выполнение, то проверяется на корректность и, следовательно, выше не компилируется. Как я могу это исправить?
Код выше упрощенная, но я не знаю, как это исправить, так как шаблоны функций не могут иметь частичную специализацию ...
выглядит хорошо, я попробую – user463035818
Я предпочитаю первое решение, второе выглядит как C++ 11, которого я не могу использовать, к сожалению. Тем не менее, я не могу заставить его работать при вызове функции из шаблона 'A', а параметры шаблона, которые я передаю (' In' в вашем коде), являются параметрами шаблона 'A'. Любая идея, почему это может быть? Я попытаюсь сделать в MCVE ... – user463035818
MCVE, который не компилирует: http://ideone.com/NQwfyA – user463035818