【发布时间】:2019-06-25 16:24:36
【问题描述】:
我正在用 C++ 编写一些模板函数,但我不确定是否可以定义一个模板函数来推断其参数的类型。
我尝试定义一个带有推断参数类型的模板,但是这个示例无法编译:
template <auto>
auto print_stuff(auto x, auto y)
{
std::cout << x << std::endl;
std::cout << y << std::endl;
}
当我为每个参数类型指定一个唯一的名称时它会起作用,但这似乎有些多余:
#include <iostream>
#include <string>
template <class Redundant_1,class Redundant_2>
auto print_stuff(Redundant_1 x, Redundant_2 y)
{
std::cout << x << std::endl;
std::cout << y << std::endl;
}
int main()
{
print_stuff(3,"Hello!");
return 0;
}
是否可以定义一个带有推断参数类型的模板,而不是给每个类型一个唯一的名称?
【问题讨论】:
-
template <auto> auto print_stuff(auto x, auto y)– 您现在要求两个autos 是同一类型(您只有一个模板参数!)还是与您的示例不同? -
@Aconcagua 我希望每个
auto都是不同的类型,但template <auto,auto>...也不起作用。 -
如果你有相同数量的模板参数和函数参数,这完全可以工作。如果数字不同,编译器永远无法知道函数参数列表中的哪个自动匹配模板参数列表中的哪个自动。委员会可能已经考虑过要求两个具有相同大小的参数列表是一个太强的限制,不值得允许整个东西。不管是不是真正的原因,我亲自加入...
标签: c++ templates c++17 auto c++-concepts