具有条件的C 模板非类型参数
C++ template non-type parameter with condition
我的非型模板,其功能指针定义为:
template<typename T>
using CallbackFn = T (*)(T);
template <CallbackFn<float> Fn>
static void run(float * data, size_t dataLen)
{
float dataMax = Fn(data[0]);
for (size_t i = 1; i < dataLen; i++)
{
dataMax = std::max(dataMax, Fn(data[i]));
}
printf("%fn", dataMax);
};
float * someData = new float[10];
run<std::sin>(someData, 10);
run<std::cos>(someData, 10);
可以做类似:
的事情template <typename T, CallbackFn<std::is_same<T, int> ? float : double> Fn>
static void run(T * data, size_t dataLen)
{
T dataMax = Fn(data[0]);
for (size_t i = 1; i < dataLen; i++)
{
dataMax = std::max(dataMax, Fn(data[i]));
}
printf("%fn", dataMax);
};
int * someDataInt = new int[10];
run<int, std::sin>(someDataInt, 10);
这是int
的愚蠢示例,但是我的Actuall代码更为复杂,我正在寻找是否有办法进行is_same
条件。
您正在寻找
CallbackFn<std::conditional_t<std::is_same_v<T, int>, float, double>>
相关文章:
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 如果可推导类型上有替换,可变参数模板类型推导会使编译器崩溃
- 未命名的非类型模板参数有什么意义?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 根据模板类型有条件地删除变量
- 有条件地选择带有 decltype() 和三元运算符的类型
- 我可以有条件地使用多个参数吗?
- 具有条件的C 模板非类型参数
- C 模板:如何根据数据类型有条件编译不同的代码
- 有条件的操作员从其参数的副本中返回值
- 一元'*'的类型参数无效(有双精度)
- 根据成员变量的类型是否存在,有条件地定义该变量
- 有什么优雅的方式吗?(类型参数包)
- 参数大小可变的函数:如何有条件地设置一些参数?
- 根据数值模板参数有条件地编译转换运算符
- 如果类型(不)相等,是否可以C++有条件地编译代码?
- 基于模板类型参数的条件成员签名和实现
- 基于模板参数有条件地定义模板类的构造函数
- 编写泛型包装器:有条件地将模板参数中的不同类型映射到单个类内部类型