我正在瀏覽一些模板示例代碼,還有一件事我不明白。需要關於C++模板格式的說明
取模板梅索德:
template<class Seq, class T, class R>
void apply(Seq &sq, R(T::*f)() const) {
typename Seq::iterator it = sq.begin();
while(sq.end() != it) {
((*it++)->*f)();
}
}
樣本類:
class MyClass {
public:
MyClass() {}
void doSomething() const {
std::cout << "doing stuff..." << std::endl;
}
};
並測試代碼:
void testMyClass() {
vector<MyClass*> v;
for(size_t i = 0; i < 5; ++i) {
v.push_back(new MyClass());
}
// call a member methode on all elements in container
apply(v, &MyClass::doSomething);
}
我將不勝感激,如果有人可以解釋我是什麼那class R
,就像在模板定義中定義的那樣?
你不知道由於我們還沒有給出'Gromit :: doSomething'的定義,推導出的返回類型是'void'。給定的代碼不應該編譯。 – 2014-11-03 22:32:41
@CrazyEddie,非常有洞察力。我希望OP意味着使用'&MyClass :: doSomething'或打算使用'Gromit'而不是'MyClass'。 – 2014-11-03 22:36:29