Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中动态定义函数+; 在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++中实现同样的效果吗?如果是,如何实现?我想到的用例是规则的动态定义,如下所示:_C++_Interface_C++ Cli_Implementation - Fatal编程技术网

在C+中动态定义函数+; 在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++中实现同样的效果吗?如果是,如何实现?我想到的用例是规则的动态定义,如下所示:

在C+中动态定义函数+; 在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++中实现同样的效果吗?如果是,如何实现?我想到的用例是规则的动态定义,如下所示:,c++,interface,c++-cli,implementation,C++,Interface,C++ Cli,Implementation,抽象规则.h #ifndef _ABSTRACT_RULE_H_ #define _ABSTRACT_RULE_H_ #include <stdio.h> class AbstractRule{ private: public: AbstractRule(); ~AbstractRule(); void enforceAbstractRule(); }; #endif Main.cpp #include "AbstractRule.h" int main(int argc

抽象规则.h

#ifndef _ABSTRACT_RULE_H_
#define _ABSTRACT_RULE_H_

#include <stdio.h>

class AbstractRule{
private:

public:
AbstractRule();
~AbstractRule();
void enforceAbstractRule();
};

#endif
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();
}

问题是,我需要在“Dosomethine here…”注释中做些什么才能达到预期效果?

如果您感兴趣的只是一个可内联定义的小函数,那么您需要看看C++11中添加的std::function和lambda支持。如果这不是一个选项,您可能可以使用一些boost库,但您可能需要定义一些命名的一次性类。

Java有一种称为“无名类”的东西,这就是您的示例所使用的-请注意,您的“概念”有点“错误”,因为您实际上并没有“动态”声明函数,您正在“动态”声明一个新类

C++中所有类都必须有一个名称[1 ]。p> 因此,对于要执行的操作,需要声明一个扩展基类的类:

class MyRule : public Rule
{
   void enforceRule();
};


void MyRule::enforceRule()
{
   ... stuff goes here ... 
}
当然,您也可以将声明
inline
放在类声明中。但是为了使用它,你需要给它起个名字

现在,您的主要功能将包括:

MyRule myRule;
[或者,更可能的情况是,您调用一个工厂函数,该函数选择“正确”的规则类,创建一个新对象,并返回指向该对象的指针]


[1] 严格来说并不总是正确的,但是对于这个特殊的用途,您确实需要一个类名

lambda适用于动态功能。另外,您的include-guard名称是保留的。我听说过lambdas,但从未使用过它们——您能提供一个示例用法或链接到一个好的综合教程吗?C++/CLI还没有lambdas。为什么这个问题被标记为
c++-cli
?在我看来,这看起来像是XY问题的一个实例。你到底想做什么?@CCJ,将两个整数相乘的函数对象是
autof=[](inta,intb){returna*b;}。有很多很好的资源可以很容易地用这个词在谷歌上搜索到。嗯,好的,那就行了。在本例中,我想在AbstractRule类虚拟中标记enforceRule()和~AbstractRule(),对吗?是的,如果您确实想使用工厂的话。但总的来说,如果你想继承和重写函数,这是一个很好的设计方法,就是这样。java无名类定义是语法糖,最终该类将被赋予一个生成的名称。在C++中,需要简单地隐藏类定义以获得类似的效果。注意,有一个棘手的方面,即匿名类定义引用定义发生的范围内的值时。您的示例没有该功能,但有可能是iirc。解决方案是将这些值设置为类构造函数的参数,或者将它们设置为模板参数,在这种情况下,隐藏的类必须是模板。
MyRule myRule;