假设您有一个 namespace

approvedParams {
   std::string s1 = "my_string_input_1";
   std::string s2 = "my_string_input_2";
}

approvedParams范围之外,存在一个函数myfun(std::string parm1)
是否可以限制myfun签名以仅接受std::string命名空间中approvedParams类型的字段?

那是:
myfun("my_string_input_1")无法编译。
myfun(approvedParams::s1)将编译。

我正在考虑使用enum实现。但是,当我解析键值配置文件时,我最终希望使用approvedParams::s1s2enum必须是整数类型。我对用map<int,std::string>添加另一个不必要的层来连接std::string的枚举整数不感兴趣。

最佳答案

s1s2的类型不包含有关声明它们的 namespace 的信息。

您可以轻松地包装一个自定义类型。

namespace approvedParams
{
   struct keytype { std::string val; };
   keytype s1 = { "my_string_input_1" };
   keytype s2 = { "my_string_input_2" };
}

void approvedParams( approvedParams::keytype );

关于c++ - C++强制遵守命名空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16225456/

10-11 16:05