例如,我有1000个不同的命名空间,它们定义如下:
namespace FirstScope {
static const char* arrayTest[2] = {"from a1","from a 2"};
}
namespace SecondScope {
static const char* arrayTest[12] = {"from b1","from b 2".....};
}
....... etc
每个都有一个包含字符串的数组。这些数组具有相同的名称:arrayTest
我有一个函数,它定义为(pesudo代码):
void function1(string stringValue)
{
return stringValueScope::arrayTest[0];
}
由于我有1000个不同的命名空间,我总是需要像
一样返回StringValueScope::arrayTest[0];
传递给function1的字符串绝对是命名空间名称的起始字符串。例如,如果stringValue
为test
,我们需要返回testScope::arrayTest[0]
。如果我们调用类似function1("First")
的function1,它将返回FirstScope::arrayTest[0]
C ++中是否有可以实现的机制/方法?
答案 0 :(得分:1)
不,没有办法做到这一点。 C ++对于类似反射的东西并没有太大的作用。
你必须找到一种根本不同的方法来做到这一点。例如,一些可能性(在许多中):
if...else
来返回正确的数组(这不是一个很好的解决方案,但可以在紧要关头工作)。map<string,const char **>
中的所有数组并在那里进行查找,如果生成了代码,您应该可以毫无问题地进行设置。map
或手动构建一个大if
。或许可以使用基本的工厂式方法使map
选项更灵活。我想如果有太多的数据来手动处理这个,你可以编写一个脚本或其他东西来解析你当前的源并生成所述map / etc.从中,并将其作为构建过程的一部分运行。其中一些选项可能比其他选项更合适。您也可以考虑其他选项。但是,单独使用名称空间或类或变量名称无法做到这一点。
如果它激发您思考其他选项:请记住,如果数据 由另一个程序生成,您不一定需要使用名称空间,还有其他无限的方法来组织数据