我试图在模板化函数内的向量成员上调用静态函数。但我无法使代码正常工作。我收到错误:'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;
}
答案 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();