在模板化容器成员上调用类函数

时间:2017-05-25 21:51:05

标签: c++ c++11 templates vector

我试图在模板化函数内的向量成员上调用静态函数。但我无法使代码正常工作。我收到错误:'Do'不是'__gnu_cxx :: __ alloc_traits> :: value_type&的成员{又名A&}'任何想法?

struct A {
  static void Do() { cout << "Hey.\n"; }
};

template <typename T>
void foo(T* v) {
  decltype(v->at(0))::Do();
}

int main() {
  vector<A> v;
  foo(&v);
  return 0;
}

1 个答案:

答案 0 :(得分:3)

T::value_type::Do();

或者

std::remove_reference<decltype(v->at(0))>::type::Do();

或者

std::decay<decltype(v->at(0))>::type::Do();

或者如果你不关心强制执行静态(并且知道向量是非空的):

 v->at(0).Do();