【发布时间】:2014-10-16 15:04:01
【问题描述】:
有时我想从模板外部访问模板参数的类型。为此,我 typedef 参数如下:
template<typename Vector>
class SomeAlgorithm
{
public:
typedef Vector Vector;
// ...
}
我觉得这很方便,因为我可以在客户端代码中使用相同的名称;这是显而易见的和简单的。
template<typename A>
void ComputeSomething(const A& a)
{
typedef typename A::Vector Vector;
Vector v = ...
}
但是,ReSharper for C++ 发出警告:
typedef redeclares a template parameter from an outer scope.
对类型参数进行类型定义有什么不好的副作用吗?或者,除了使用 typedef 的另一个名称之外,还有更好的方法来实现同样的效果吗?
【问题讨论】:
-
不确定,但是,使用同时应用于内部模板和外部模板的命名空间可以避免这个问题。