不同的C ++模板typename定义意味着相同的?

时间:2017-04-20 14:40:56

标签: c++ class templates

template <typename T>
class A {
    int func(T a);
};

template <typename V>
int A<V>::func(V a) {
    return 0;
}

在Visual Studio 2017中,当我编写上述代码时,编辑器会显示Function denfinition for 'func' not found,并建议我创建一个使用typename T的新代码。但是,我仍然可以编译并成功运行。

这让我很困惑。这是Visual Studio中的错误吗? int A<V>::func(V a)与A类中的int func(T a)相同吗?

在所有声明和定义中编写相同的typename是一种好习惯吗?

1 个答案:

答案 0 :(得分:4)

  

这是Visual Studio中的错误吗?

是的,它是Intellisense中的一个错误(正如您可以编译并运行得很好的事实所示)。

  

int A<V>::func(V a) int func(T a)A中的A<V>是否相同?

该课程为A return $this->redirectToRoute('operations_view',array('id'=>$user_id)); 课程模板)但是是。

  

在所有声明和定义中编写相同的typename是一种好习惯吗?

也许,为了最大限度地提高代码的清晰度。

如果没有理由更改模板参数的名称,请不要更改它。