假设有这么一个模板类
template <typename T>
class Stack {
public:
Stack(T elem) : elems({std::move(elem)}){};
private:
std::vector<T> elems;
};
我们使用字符串字面量来实例化这个模板类
Stack s = "bob";
这里我用的msvc编译器,cpp20标准,推导出的s类型为 Stack<const char *> s
这可能不太实用,我希望能推导出一个Stack<std::string> s
这时候我们可以写一个 Deduction Guid帮助模板类推导,具体写法为
Stack(const char*) -> Stack<std::string>;
然后我们就可以得到一个Stack<std::string> s
全部代码在下面
#include <iostream>
#include <vector>
template <typename T>
class Stack {
public:
Stack(T elem) : elems({std::move(elem)}){};
private:
std::vector<T> elems;
};
Stack(const char*) -> Stack<std::string>;
int main() {
Stack s = "bob";
}