假设您有一个 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::s1
和s2
。 enum
必须是整数类型。我对用map<int,std::string>
添加另一个不必要的层来连接std::string
的枚举整数不感兴趣。 最佳答案
s1
和s2
的类型不包含有关声明它们的 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/