将方法作为模板化参数传递 C++11
Passing method as templated argument C++11
我有这个结构:
class A {
public:
int setI(int i){_i = i;}
private:
int _i;
}
class B {
public:
int setZ(int z){_z = z;}
private:
int _z;
}
class C : public A, public B {};
然后我想从其他地方的模板化函数调用方法 setI 或 setZ
像这样:
template <class P>
void myMethod(P &myclass, void (P::*setter) (const int)) const
{
int var = 9;
(myclass.*setter)(var);
}
我像这样使用这种方法:
C c;
mymethod(c, &C::setI);
它失败了,因为 setI 是在 A 中定义的,而不是在 C 中定义的,有没有办法按照这个结构从类 A 或类 B 传递方法?
感谢和问候
它失败的部分原因是C::setI
protected
。通过制作C::setI
public
来访问该段代码。
另一部分是void(P::*setter)(const int)
不是C::setI
的类型。它应该是int(P::*setter)(int)
.
或者,将 lambda 传递给myMethod
,它使您不必拼写成员函数指针类型,并且可以更高效:
template<class P, class Setter>
void myMethod(P &myclass, Setter set) {
int var = 9;
set(myclass, var);
}
int main() {
C c;
myMethod(c, [](C& c, int a) { c.setI(a); });
}
您可能还希望启用警告(-Wall -Wextra -Werror
forgcc
和clang
(,以便在函数忘记返回值时编译失败,就像setI
和setZ
所做的那样。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 使用 C++11 将指向成员函数的指针作为参数传递
- 将方法作为模板化参数传递 C++11
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 将成员函数作为参数传递给其他成员函数 (C++ 11 <function>)
- 在 C++11 中,如何不将参数传递给线程
- 如何在 C++11 中将类中的函数作为参数传递给同一类中的另一个函数?
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- 如何在 C++11/14 中将类方法作为参数传递
- 在 C++11 中将reference_wrapper对象作为函数参数传递
- 在 C++11 中将结构作为输出参数传递
- C++11 最优参数传递
- C++11 将函数作为 lambda 参数传递
- 传递 C++11 中具有未指定参数的函数
- c++将各种参数传递给父类构造函数(线程c++11)
- 可变函数和c++ 11,将对象作为参数传递
- c++ 11 Setter函数参数传递nullptr
- c++ 11 lambda表达式-捕获与参数传递
- C++11通过推导的类型参数传递成员函数调用