【发布时间】:2015-01-22 15:07:13
【问题描述】:
我认为解释我的问题的最好方法是使用一段代码:
class IncreasingMultiplier {
protected:
IncreasingMultiplier(int initialMultiplier = 0, int incrementation = 1)
int getMultiplier() {
mCurrentMultiplier += mIncrementation;
return mCurrentMultiplier - mIncrementation;
}
void setMultiplier(int multiplier) {
mCurrentMultiplier = multiplier;
}
void setIncrementation(int incrementation) {
mIncrementation = incrementation;
}
private:
int mCurrentMultiplier;
int mIncrementation;`
}
class ConstMultiplier {
protected:
int getMultiplier() const {
return 10;
}
}
class NumberLogger {
public:
void log() {
int currentNumber = getNumber(); // How can I call this method?
std::cout << "Current number is " << currentNumber << std::endl;
}
}
template<
class MultiplierPolicy,
class LoggingPolicy
>
class Host : public MultiplierPolicy, public LoggingPolicy {
public:
int getNumber() const {
return mNumber * getMultiplier();
}
private:
int mNumber;
}
基本上,一个策略可能需要访问宿主类中定义的成员,而这些成员又依赖于提供给宿主类的其他策略。
谢谢!
【问题讨论】:
-
在您的代码中,没有任何东西继承
NumberLogger或调用它的成员函数。它与Host类有什么关系?你需要给NumberLogger::log()一个Host实例来调用成员函数。 -
我想你应该看看CRTP。
标签: c++ policy policy-based-design