给定 C++17 中的代码:
template<class T>
struct Ok {
T value;
};
template<> struct Ok<void> {};
// template deduction guides
template<class T> Ok(T) -> Ok<T>;
模板推导指南允许将类型作为函数Ok<T>调用Ok(这是它的样子,实际上,构造函数被调用):
auto c = Ok(5); // T deduced as int
// без template deduction guide я так писать не могу,
// но должен писать:
auto c = Ok<int>(5); // T can not be deduced :(
问题是如何在 C++14 或更低版本中重写它?让我简单地写:
auto c = Ok("hello"s); // T deduced as std::string
但是具有任意类型。