【发布时间】:2019-05-23 19:15:34
【问题描述】:
我在这个网站上发现了以下代码(如下)
https://www.modernescpp.com/index.php/c-insights-variadic-templates
但此声明/定义仅适用于整数,我想编写一个适用于其他类型的版本,如 float、double、std::strings 和重载“+”运算符的用户定义类型。但是我正在努力写一个。
请注意,上述网站有基于可变参数函数模板的解决方案,适用于不同的数据类型,包括浮点类型(尚未尝试使用用户定义的类型)。我正在寻找基于可变参数模板类的解决方案。这纯粹是为了学习目的。
有人可以帮我解决这个问题吗?
#include<iostream>
template<int...>
struct add;
template<>
struct add<>
{
static constexpr int value = 0;
};
template<int i, int... tail>
struct add<i, tail...>
{
static constexpr int value = i + add<tail...>::value;
};
int main()
{
std::cout << add<1,2,3,4>::value;
}
我写了这个但是卡住了
template<typename ...>
struct add;
template<typename T, typename... args>
struct add<T, args...>
{
static constexpr T value = ??//T();//what to write here?
};
提前致谢。
【问题讨论】:
-
以原始示例并将
int替换为auto。您可以使用折叠表达式简化代码。 -
C++11、C++14 还是 C++17?
-
@NeutronStar 一票赞成这个好问题。我发布了一个答案。请看一下,如果需要进一步解释,请随时询问。我也感谢投票/接受!
标签: c++ variadic-templates template-meta-programming