【发布时间】:2017-11-08 22:36:08
【问题描述】:
假设我有一个类,其中包含一个方法speak(),它将向终端打印一些东西。它究竟会打印什么由初始化布尔值决定,如果为真,它将打印“Foo”,如果为假,它将打印“Bar”。布尔值的值是在运行时确定的。
实现这一点的一种方法是在speak() 函数中添加if 语句,然后调用foo() 或bar() 方法。但是,如果频繁调用此类方法,则可以通过在类初始化时将speak() 函数替换为foo() 或bar() 函数来避免if 开关和附加函数调用。有没有办法使用,也许使用功能点来实现这个功能?
class MyClass
{
public:
MyClass (const bool select)
{
if (select)
{
// Make speak() use foo();
}
else
{
// Make speak() use bar();
}
}
speak() const;
private:
foo() const { std::cout << "Foo\n"; }
bar() const { std::cout << "Bar\n"; }
}
似乎这种行为是有益的,因此我认为有某种方法可以实现它。但是,我没有找到如何做到这一点的运气,主要是因为我不确定要谷歌搜索什么。
感谢您的帮助和建议。
【问题讨论】:
-
我认为这个问题stackoverflow.com/questions/2898316/… 是关于一个类似的想法。也许答案会为您指明正确的方向。
标签: c++ methods initialization function-pointers member-function-pointers