如果我的模板类具有默认模板类型,则必须编写模板尖括号。 是否可以避免这种情况?
例子:
template <typename T=int>
class tt {
public:
T get() { return 5; }
};
...
tt<> t; // how to avoid <>
std::cout << t.get() << std::endl;
到目前为止,我已经通过一个单独的命名空间并重新声明了该类来做到这一点:
namespace detail_ {
template <typename T=int>
class tt {
public:
T get() { return 5; }
};
}
class tt : public detail_::tt {}
...
tt t;
std::cout << t.get() << std::endl;
问题是,如果要与其他类型一起使用该类,则必须遍历 namespace detail_。 还有另一种解决方案,我还没有看到。
最佳答案
从C++ 17开始,由于class template argument deduction,事情变成have changed。tt
和tt<>
不是同一件事:类型和类模板是不同的,并且继续被区别对待。
无论如何,在简单的场景中(例如您的示例中的场景),C++ 17都会假设您的意思,并且不再需要<>
了。
更多详细信息: