在一行中将Template <class t =“”>应用于多种类型的别名

时间:2019-04-18 21:35:35

标签: c++

假设我有一些类似的类型别名:

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显然是任意类型,我可以重用它吗?

2 个答案:

答案 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>;

在实际应用中,有更大的鱼可以油炸。这远远不是您最大的问题。不用太担心。继续下一个问题。