【发布时间】:2013-02-23 09:40:10
【问题描述】:
在 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");
}
Main.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();
}
问题是,我需要在 'do something here...' 评论处做什么才能达到预期的效果?
【问题讨论】:
-
Lambdas 适用于动态函数。此外,您的包含保护名称是保留的。
-
我听说过 lambda,但从未使用过它们——您能否提供一个示例用法或指向一个好的综合教程的链接?
-
C++/CLI 还没有 lambda。为什么这个问题还是被标记为
c++-cli? -
对我来说,这看起来像是 XY 问题的一个实例。你真正想要完成什么?
-
@CCJ,将两个整数相乘的函数对象是
auto f = [](int a, int b) {return a * b;};。有很多很好的资源很容易用这个词在谷歌上搜索。
标签: c++ interface c++-cli implementation