Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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++ 功能类似于Perl';在C+中自动加载+;_C++_Autoload_Generic Programming - Fatal编程技术网

C++ 功能类似于Perl';在C+中自动加载+;

C++ 功能类似于Perl';在C+中自动加载+;,c++,autoload,generic-programming,C++,Autoload,Generic Programming,Perl允许您使用名为AUTOLOAD的功能捕捉对未定义方法的调用。每当调用Perl找不到的方法时,它都会查找一个自动加载方法,并调用该方法。这可以用很多不同的方法。 有关更多信息,请参阅: 最近我进入C++,并且好奇是否有一种方法来模拟C++程序中的这种功能。我知道C++中的每一件事情都需要在编译时被定义,这使得这个问题变得棘手,但我想必须有一些技巧,包括模板或其他一些可以至少接近的技巧。 < Perl的代码> > AutoLoad < /C>功能> C++中最接近的是什么?这在Perl的代码

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