有时我想从模板外部访问模板参数的类型。为此,我按如下方式键入参数:

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使用另一个名称之外,还有更好的方法来实现相同的目的?

最佳答案

类型定义类型参数是否有不良影响?


是的,它无效。参数名称在模板范围内已经是typedef名称,因此您不能声明另一个具有相同名称的typedef。


  还是在为typedef使用另一个名称之外,还有更好的方法来实现相同的目的?


否。为typedef使用另一个名称。

关于c++ - 创建typedef从外部作用域重新声明模板参数的负面影响?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26407703/

10-17 01:36