类型取决于模板中的条件

Type depends on condition in template

本文关键字:条件 取决于 类型      更新时间:2023-10-16

我可以用参数制作模板功能,哪些类型取决于模板参数?(下面的代码只是为了解释,我想要什么(

#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或更高的示例也将是一个很好的经验。

谢谢=(

您只需要添加::typetypename

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;
}