类型取决于模板中的条件
Type depends on condition in template
我可以用参数制作模板功能,哪些类型取决于模板参数?(下面的代码只是为了解释,我想要什么(
#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或更高的示例也将是一个很好的经验。
谢谢=(
您只需要添加::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;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有太多条件句的情况下,我如何避免被零除
- 修复"-Wunused-parameter"取决于预处理器条件的警告
- 条件跳转或移动取决于 std::wistringstream 的未初始化值
- 如果条件取决于模板类型并且在编译时已知,是否可以保证C++编译器不会生成分支?
- 初始化数据成员取决于构造函数中的条件
- Valgrind:使用atomic::compare_exchange_weak时,条件跳转或移动取决于未初始化的值
- 回文程序和条件跳转或移动取决于未初始化的值
- 类型取决于模板中的条件
- CMake 条件库链接取决于平台
- Valgrind抱怨使用有条件跳跃,这些跳跃取决于非初始化的字节
- 条件跳转或移动取决于函数调用中未初始化的值
- 如何将std::enable_if与一个本身取决于另一个条件的条件一起使用
- Valgrid 错误 - 条件跳转或移动取决于未初始化的值
- opencv2/photo/photo.hpp c++ 的条件包含,具体取决于 OpenCV 版本
- 模板函数实现中的条件,具体取决于类型是否为指针
- 条件跳转或移动取决于未初始化的值和大小的无效写入
- 条件跳转或移动取决于未初始化的值
- 条件跳转或移动取决于未初始化的值和分割错误
- valgrind条件跳转或移动取决于未初始化的值,这是否表示内存泄漏