c – 如何解析/推导模板参数?

在学习和试验模板时,我遇到了一些我无法完全掌握的东西.
class sample
{
    public:
        sample(int a = 0) {}
};

template <typename T1,typename T2>
void add(T1 a) // Replace T1 with T2 resolves compilation error.
{}

int main()
{
    add<sample>(3); 
    return 0;
}

上面的代码导致编译错误(03和c 0x).但是当我将添加的参数类型从T1更改为T2时,它就可以了.对于nm,创建的原型是add(sample,int)[T1 = sample,T2 = int].为什么编译失败,T1作为参数类型而不是T2?

解决方法

有两种方法可以指定模板参数:显式或隐式.

这将是明确的:

template<typename T>
void do_something(T value) {};

do_something<float>(6);  // T is float

这将是隐含的:

int x;

do_something(x);  // since first argument is T and x is int,T is int

在你的情况下:

template <typename T1,typename T2> void add(T1 a);
add<sample>(3);  // T1 is explcitly sample,T2 is unknown

案例2:

template <typename T1,typename T2> void add(T2 a);
add<sample>(3);  // T1 is explcitly sample,T2 is implicitly int

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...