我可以在单个类型上定义一个可变模板函数吗
Can I define a variadic template function on a single type?
我可以定义一个可变模板函数而不是一个不断变化的类型,而是一个单一的类型吗?如果我的目标是定义一个只添加可变数int
而不添加浮点值的函数,或者其他任何函数,那么我能用template<int....>
语法以某种方式做到这一点吗?
我可以很容易地把多种类型的样品放在一起:
int add() { return 0; }
template<typename T, typename... TS>
T add(T n, TS... m)
{ return n+add(m...); }
但是,如何仅在此使用int
?显然,它不能按照模式将<int>
放在模板参数列表中,因为我想要一个在(...)
之间而不是在<...>
之间接受参数的函数,如下所示:
template<int n>
int constant() { return n; }
constant<4>(); // using the int-template function
因此,对我来说,以下内容显然是行不通的。但作为一个起点。。。
template<int, int...>
int add(int n, int... m) // error, of course.
{ return n+add(m...); }
如何为add(1)
、add(1,2)
、add(1,2,3)
等定义add
,但仅为int
-Arguments定义。它不应该为add(1.0)
生成float
-函数(可能调用会起作用,但这只是因为1.0
转换为int
)。
注意:我的意思不是仅仅用enable_if
之类的东西来约束类型T
或TS
。我只是觉得这类变体模板可能有一个语法,我在这里错过了。
为此,您实际上应该只使用std::initializer_list
,这与仅用于一种类型的变差函数非常相似。
int add(std::initializer_list<int> list) {
int sum = 0;
for (auto i : list) sum += i;
return sum;
}
现在你可以这样称呼它int i = add({1,2,3,4,5,6});
如果你真的想,你可以很容易地在中放置一个静态断言,它将为你做这件事。
int add() { return 0; }
template<typename T, typename... TS>
T add(T n, TS... m)
{
static_assert(std::is_same<T,int>::value,"bad type");
return n+add(m...);
}
但IMO这完全违背了可变模板的目的,并将使程序更难读写。
int add() { return 0; }
template<typename... TS>
int add(int n, TS... m)
{
return n + add(m...);
}
这样的代码出了什么问题?
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何仅为一个函数添加延迟
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 我需要将多个函数组合为一个函数
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 将 N-arg 函数包装到另一个函数中
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- C++从另一个函数退出函数
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 视觉我希望一个函数在另一个函数C++中进行计算
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在另一个函数 (c++) 中调用变量
- 如何在另一个函数中使用返回值作为参数?
- 如何包装一个函数以适应另一个函数的所需类型
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针