C++ では、あるクラスの関数を別の (依存関係を除いて無関係な) クラスの関数内に実装することは可能ですか? 私が探している動作は、次のように匿名の内部クラス内に実装されている抽象メソッドやインターフェースを使用して Java で実現できます。
Interface IFoo{
public void doFoo();
}
Class Bar {
private IFoo impl;
public Bar(IFoo implArg){
impl = implArg;
}
}
static void main(String[] args) {
Bar myBar = new Bar(new IFoo(){
@Override
public void doFoo(){
System.out.println("hello foo impl!");
}
});
}
これと同じ効果を C++ で実現できますか。私が念頭に置いているユースケースは、次のようなルールのオンザフライ定義です。
AbstractRule.h
#ifndef _ABSTRACT_RULE_H_
#define _ABSTRACT_RULE_H_
#include <stdio.h>
class AbstractRule{
private:
public:
AbstractRule();
~AbstractRule();
void enforceAbstractRule();
};
#endif
AbstractRule.cpp
#include "AbstractRule.h"
AbstractRule::AbstractRule(){
}
AbstractRule::~AbstractRule(){
}
void AbstractRule::enforceAbstractRule(){
printf("placeholder impl of enforceRule-- should not see this in production");
}
メイン.cpp
#include "AbstractRule.h"
int main(int argc, char** argv){
AbstractRule myRule;
//do something here so that myRule.enforceAbstractRule() call prints "enforced
//myRule!"
myRule.enforceAbstractRule();
}
問題は、目的の効果を達成するために「ここで何かを行う...」コメントで何をする必要があるかということです。