看看这段代码。
#include <vector>
template<class ...Args>
using other_vector = std::vector<Args...>;
template<class T>
void f(std::vector<T>& ) {}
template<class T>
void f(other_vector<T>& ) {}
int main()
{
other_vector<int> b;
f(b);
return 0;
}
它不会编译,因为
f
被重新声明了。我完全理解这个错误。但是我需要一个行为类似于std::vector<T>
的第二个类,但将被视为不同的类型,以便重载(就像上面的示例)是合法的。我该怎么办?
- 让新类拥有
std::vector<T>
作为基类。这可能有效,但不应从std容器继承。
- 让新类具有std :: vector类型的成员,然后重新声明所有函数以重定向到成员的函数。听起来很费力。
- 有更好的替代方案吗?允许C++11或C++14。
BOOST_STRONG_TYPEDEF
。如果它在模板中无法正常工作,你可以从中获得灵感,以创建能够正常工作的类似东西。 - chrisstruct vector_wrapper{ std::vector<T> vector; };
? - zch