c++ - 在 C++ 模板中省略参数

标签 c++ templates

调用模板函数时可以省略函数名后的类型吗?

例如,考虑以下函数:

template<typename T>
void f(T var){...}

可以简单地这样调用它吗:

int x = 5;  
f(x);

或者我必须包含类型吗?

int x = 5;  
f<int>(x);

最佳答案

只要编译器可以从函数参数中推断出模板参数,就可以将它们排除在外。这也是一种很好的做法,因为它会使您的代码更易于阅读。

此外,您只能保留末尾的模板参数,不能保留开头或中间:

template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}

int main() {
    f<int>(5);      // NOT LEGAL
    f<int, int>(5); // LEGAL

    g<int>(5);      // LEGAL
    g<int, int>(5); // LEGAL

    return 0;
}

关于c++ - 在 C++ 模板中省略参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146048/

相关文章:

c++ - 在自定义冒泡排序实现中比较迭代器崩溃程序而没有错误

c++ - this-> 是否必须从派生类访问 Base<T> 标识符?

c++ - 了解声明中模板参数的数量

c++ - deque::shrink_to_fit内存保证

c++ - C++中指针的问题

c++ - SDL 2,如何使用事件系统和异步绘制

c++ - 创建虚拟分区

ruby-on-rails - 让用户为自定义布局编写数据库存储的 CSS

c++ - Opencv 通用 Mat 函数头文件

c++ - 为什么 C++ 中的虚函数称为 'virtual' ?