C++ 功能类似于Perl';在C+中自动加载+;
Perl允许您使用名为C++ 功能类似于Perl';在C+中自动加载+;,c++,autoload,generic-programming,C++,Autoload,Generic Programming,Perl允许您使用名为AUTOLOAD的功能捕捉对未定义方法的调用。每当调用Perl找不到的方法时,它都会查找一个自动加载方法,并调用该方法。这可以用很多不同的方法。 有关更多信息,请参阅: 最近我进入C++,并且好奇是否有一种方法来模拟C++程序中的这种功能。我知道C++中的每一件事情都需要在编译时被定义,这使得这个问题变得棘手,但我想必须有一些技巧,包括模板或其他一些可以至少接近的技巧。 < Perl的代码> > AutoLoad < /C>功能> C++中最接近的是什么?这在Perl的代码
AUTOLOAD
的功能捕捉对未定义方法的调用。每当调用Perl找不到的方法时,它都会查找一个自动加载
方法,并调用该方法。这可以用很多不同的方法。
有关更多信息,请参阅:
最近我进入C++,并且好奇是否有一种方法来模拟C++程序中的这种功能。我知道C++中的每一件事情都需要在编译时被定义,这使得这个问题变得棘手,但我想必须有一些技巧,包括模板或其他一些可以至少接近的技巧。
< Perl的代码> > AutoLoad < /C>功能> C++中最接近的是什么?这在Perl的代码> AutoLoad < /C> >的有意义定义中是不可能的。 基本问题是,方法名称在编译时在C++中被解析。这是真的。但接下来就要决定调用哪个已经定义好的方法了
在源文件中调用一个方法名的基本功能,以及编译代码,而不存在任何现有名称的方法,C++中没有。
当然,如果您认为重写Perl是一个合理的答案,那么答案是肯定的,这是可能的。但是这就变成了一个微不足道的问题。这在Perl的
自动加载的有意义的定义中是不可能的
基本问题是,方法名称在编译时在C++中被解析。这是真的。但接下来就要决定调用哪个已经定义好的方法了
在源文件中调用一个方法名的基本功能,以及编译代码,而不存在任何现有名称的方法,C++中没有。
当然,如果您认为重写Perl是一个合理的答案,那么答案是肯定的,这是可能的。但这就变成了一个微不足道的问题。来吧,伙计们。。。不要这么悲观,只是说事情是不可能的,因为这是容易做到的。用每种语言做任何事情都有一种方法。是的,有时它是超级黑客和可怕的,但超级黑客可怕的答案在这里是完美的!我想把它作为一种学习经验来理解,而不是把它放在生产代码中
这不是一个好的或完整的答案,但这是我能从C++得到的最接近的答案。在我的示例中,call
方法被用作一种黑客式的“自动加载程序”。它肯定可以做得更好,而且肯定有一些方法可以在不编写全新语言的情况下更接近Perl的自动加载功能。我所要求的就是让你有创意
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Test {
public:
Test() {
table["get"]["x"] = 1;
table["get"]["y"] = 2;
}
int call(string method, string arg) {
if (method == "get") {
return table[method][arg];
}
else {
// Do something else
}
return 0;
}
private:
map<string, map<string, int> > table;
};
int main(int argc, char* argv[]) {
Test test;
cout << test.call("get","x") << endl;
cout << test.call("get","y") << endl;
}
#包括
#包括
#包括
使用名称空间std;
课堂测试{
公众:
测试(){
表[“get”][“x”]=1;
表[“get”][“y”]=2;
}
int调用(字符串方法,字符串参数){
如果(方法==“获取”){
返回表[方法][arg];
}
否则{
//做点别的
}
返回0;
}
私人:
地图表格;
};
int main(int argc,char*argv[]){
试验;
来吧,伙计们……不要这么悲观,只是说事情是不可能的,因为这是很容易做到的。用每种语言做任何事情都有一种方法。是的,有时它是超级黑客和可怕的,但超级黑客可怕的答案在这里是完美的!我想把它作为一种学习经验,而不是说我生产代码中的t
<>这不是一个好的或完整的答案,但这是我能从C++得到的最接近的例子。在我的例子中,调用< /Cord>方法被用作一种“自动”的“自动装弹器”。它肯定可以做得更好,而且肯定有办法在不编写全新语言的情况下更接近Perl的自动加载功能
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Test {
public:
Test() {
table["get"]["x"] = 1;
table["get"]["y"] = 2;
}
int call(string method, string arg) {
if (method == "get") {
return table[method][arg];
}
else {
// Do something else
}
return 0;
}
private:
map<string, map<string, int> > table;
};
int main(int argc, char* argv[]) {
Test test;
cout << test.call("get","x") << endl;
cout << test.call("get","y") << endl;
}
#包括
#包括
#包括
使用名称空间std;
课堂测试{
公众:
测试(){
表[“get”][“x”]=1;
表[“get”][“y”]=2;
}
int调用(字符串方法,字符串参数){
如果(方法==“获取”){
返回表[方法][arg];
}
否则{
//做点别的
}
返回0;
}
私人:
地图表格;
};
int main(int argc,char*argv[]){
试验;
你知道你链接到的Perl文档的副本是很古老的吗?Perl 5.00503是1999年发布的。稍微更新一点:>不要只是说这是不可能的!因为那样你就撒谎了。Perl是用C实现的。我可以想象这对C来说是一项困难得多的任务!;)这种推理是错误的Perl动态类型化和解释的事实,在Perl中有一些事情可以做,但是不能在C(和C++中静态地编译和编译)中做。@ NEFAS,在技术上实现了一个全新的使用C++的动态类型语言:一个方法是:……虽然不是我要找的答案,但LoLeLead标准C++语言没有这个工具。您需要用Perl具有相同的C代码修改编译器。另一个选择是实现功能I。你的程序。把你的函数放到动态库中,然后搜索它们。你可以制作一个函数名和动态库的表来加快搜索速度。你所要求的是C++所不能提供的。为了实现你想要的,你必须重新发明一个全新的系统,这只是初学者的事!你知道C语言吗?您链接到的Perl文档的opy是古老的?Perl 5.00503是在1999年发布的。稍微更新一点:>不要只是说这是不可能的!因为那样您就会撒谎了。Perl是用C实现的。我可以想象这对C来说将是一项困难得多的任务!;)这种推理是错误的!因为Perl是动态的ly