我正在浏览一些模板示例代码,还有一件事我不明白。需要关于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