我可以使用参数创建模板函数,哪些类型取决于模板参数? (下面的代码只是为了解释,我想要的)
#include <complex>
template <bool two>
void foo( (if (two) ? double* : std::complex<double>* >) input, size_t n)
{
for (size_t i = 0; i < n; ++n)
input[i] *= two ? 2.0 : 1.0;
}
void foo_double(double *input, size_t n){
foo<true>(input,n);
}
void foo_complex (std::complex<double> *input, size_t n){
foo<false>(input,n);
}
我认为std::conditional
会有所帮助,但我想,我不知道如何正确使用它(下面的代码无法编译)
#include <type_traits>
#include <complex>
template <bool two>
void foo(std::conditional<two, double*, std::complex<double>* > input, size_t n)
{
for (size_t i = 0; i < n; ++n)
input[i] *= two ? 2.0 : 1.0;
}
void foo_double(double *input, size_t n){
foo<true>(input,n);
}
void foo_complex (std::complex<double> *input, size_t n){
foo<false>(input,n);
}
如果有人找到不高于c ++ 11的解决方案,那将是非常好的,所以我将能够在vs2012和gcc-6 +中编译它。但是c ++ 14或更高版本的一些例子也是很好的经验。
谢谢=)
答案 0 :(得分:2)
您只需添加::type
和typename
template <bool two>
// ......*typename*.....................................................*::type*
void foo (typename std::conditional<two, double*, std::complex<double>* >::type input, size_t n)
{
for (size_t i = 0; i < n; ++n)
input[i] *= two ? 2.0 : 1.0;
}