gpt4 book ai didi

c++ - 如何在模板中调用带有参数的模板函数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:16 25 4
gpt4 key购买 nike

我有这个功能:

template <typename T, T sep>
void split (){
std::cout << sep << std::endl;
}

当我尝试使用此命令调用它时:split<'f'>();
我收到以下错误:

q3.cpp: In function ‘int main()’:
q3.cpp:36:16: error: no matching function for call to ‘split()’
split<'f'>();
^
q3.cpp:36:16: note: candidate is:
q3.cpp:31:6: note: template<class T, T sep> void split()
void split (){
^
q3.cpp:31:6: note: template argument deduction/substitution failed:

为什么?

最佳答案

Why?

因为第一个模板参数是类型,而不是值。 'f'是字符常量,一个值。而且您不能将其插入类型。

正确的调用应该是 split<char, 'f'>() .

在即将到来的 C++17 标准中,您实际上可以以允许您想要的语法的方式重新定义您的模板:

template <auto sep>
void split (){
std::cout << sep << std::endl;
}

现在打电话split<'f'>()将推断出 sep 的类型.

关于c++ - 如何在模板中调用带有参数的模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45188728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com