C++:使用传入的字符串参数来访问类型中的某些内容

Cas*_*ton 0 c++ parameters types namespaces

我的目标是访问作为myFunction内部参数传入的类.

这是我正在尝试做的事情:

void myFunction(string myString)
{
   callFunctionOn(OuterType::InnerType::myString);
}
Run Code Online (Sandbox Code Playgroud)

我试图在一个类型的东西上调用一些函数.例如,我在其他文件中的代码可能如下所示:

namespace OuterType {
namespace InnerType {
//stuff here
}
}
Run Code Online (Sandbox Code Playgroud)

但是,以这种方式使用myString不起作用.如果myString持有值"class1",那么我希望将callFunctionOn部分解释为

callFunctionOn(OuterType::InnerType::class1);
Run Code Online (Sandbox Code Playgroud)

我觉得这很简单,但我整天都在编程,我的思绪变得疲惫......

求助:看起来就像这样,我需要一种带反射的语言.为了解决这个问题,我对问题采取了不同的方法,并将指针传递给了类.

Ben*_*igt 6

C++没有内置的反射,但它确实有指向数据,函数和类成员的指针.因此,您可以使用std::mapunordered_set查找具有特定名称的指针(您必须事先将所有名称/指针对添加到地图中).

您的解决方案可能类似于:

namespace Outer
{
    namespace Inner
    {
        void funcA( void ) { std::cout << "called funcA" << std::endl; }

        std::map< std::string, void (*)(void) > members;
    }
}

// in some initialization function
Outer::Inner::members["funcA"] = &Outer::Inner::funcA;


// later
std::string myString = "funcA";
void (*f)(void) = Outer::Inner::members[myString]; // lookup function by name
(*f)(); // call function via its pointer
Run Code Online (Sandbox Code Playgroud)

当然,指针的类型可能需要更改以满足您的应用程序要求.