假设你有一个命名空间
approvedParams {
std::string s1 = "my_string_input_1";
std::string s2 = "my_string_input_2";
}
在approvedParams
的范围之外存在一个函数 myfun(std::string parm1)
是否可以约束 myfun
签名只接受 std::string
类型的字段来自 approvedParams
namespace ?
即:
myfun("my_string_input_1")
不会编译。
myfun(approvedParams::s1)
将编译。
我正在考虑使用 enum
来实现.但是我最终想使用 approvedParams::s1
和 s2
当我解析键值配置文件时。 enum
必须是整数类型。我对使用 map<int,std::string>
添加另一个不必要的层不感兴趣将枚举整数与 std::string
连接起来.
最佳答案
s1
和 s2
的 type 不携带有关它们在其中声明的 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++ 强制命名空间合规性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225456/