假设我有一些类似的类型别名:
template<class T> using v=vector<T>;
template<class T> using s=set<T>;
template<class T> using u_s=unordered_set<T>;
(是的,我知道这会使我的代码不可读,是的,我知道我在使用命名空间std不好。)
有没有更短的语法,行得通?我正在设想这样的事情,但我知道这行不通:
template<class T>{
using v=vector<T>;
using s=set<T>;
using u_s=unordered_set<T>;
}
我只是不明白为什么每次编译器都必须写出模板才能理解我的意思。 T显然是任意类型,我可以重用它吗?
答案 0 :(得分:2)
不可能,这是不可能的。最接近的事情是使用宏(不是我所建议的):
#define TP template<class T>
TP using v = vector<T>;
TP using s = set<T>;
TP using u_s = unordered_set<T>;
#undef TP
您不能重复使用T
,因为这三个别名彼此无关,因此T
每次通常都不同。
答案 1 :(得分:0)
是的,我知道这会使我的代码不可读
我不同意这种评估。它比基于宏的解决方案更具可读性。
是的,我知道我正在使用命名空间std不好。
我在那里同意你的看法。
将std::
添加到类型名称中,您就很好了。
template<class T> using v = std::vector<T>;
template<class T> using s = std::set<T>;
template<class T> using u_s = std::unordered_set<T>;
在实际应用中,有更大的鱼可以油炸。这远远不是您最大的问题。不用太担心。继续下一个问题。