我可以使用参数创建模板函数,哪些类型取决于模板参数? (下面的代码只是解释,我想要什么)类型取决于模板中的条件
#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::condition
会有所帮助,但我想,我不知道如何正确地在这里(下面的代码不能编译)
#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或更高版本的例子也是很好的体验。
感谢=)
为什么你需要,甚至做到这一点?为什么不'template void foo(T input,size_t n){...}'? –
NathanOliver
'std :: conditional'是正确的选择。你看过[docs](http://en.cppreference.com/w/cpp/types/conditional)看看如何使用它?如果您无法访问C++ 11,则应该可以自己实现它(如果需要帮助,可以将其记录下来)。 – Rakete1111
使用'std :: conditional'就像这样:'std :: conditional :: type' –
qxz