【发布时间】:2018-08-13 02:37:05
【问题描述】:
我目前正在编写一段 C++11 代码:
class A {
public:
//.. generic public methods which call updateInternalState from time to time ..
private:
void updateInternalState();
B internalState;
};
现在我想要有几个版本的 A 类,除了 updateInternalState() 方法之外,它们都是相同的,它会有所不同,并且至少有 3 个不同的版本,做不同的事情,将来可能会有更多。这听起来几乎是一个使用基类继承的好地方,但我想知道是否有一个模板元编程版本,例如:
#include <functional>
template <std::function<void()> updateInternalState>
class A {
public:
//.. generic public methods, which call updateInternalState from time to time ..
private:
B internalState;
然后我只需要在其他地方定义函数并显式实例化我想要的 A 版本。
我认为最大的问题是 updateInternalState 函数需要访问 A 的私有成员。我认为这可以通过将其声明为 A 的朋友或存储 std::function 类型的成员来解决并将模板参数分配给它。
有人对这种方法有经验并有任何建议吗? 这是一个糟糕的想法吗?我是否应该回到继承(我并不真正想要,因为项目的其余部分是用通用编程范式编写的。)
【问题讨论】:
-
它们有不同的功能,你的要求是什么?
-
听起来你有两个类:一个容器和一个应该知道如何更新其内部状态的包含对象。
标签: c++ c++11 templates functional-programming