C++ 强制命名空间合规性

标签 c++ c++11 namespaces

假设你有一个命名空间

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::s1s2当我解析键值配置文件时。 enum必须是整数类型。我对使用 map<int,std::string> 添加另一个不必要的层不感兴趣将枚举整数与 std::string 连接起来.

最佳答案

s1s2type 不携带有关它们在其中声明的 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/

相关文章:

c++ - 如何调整 Windows 10 窗口大小并忽略透明边框?

c++ - 为什么按引用传递会导致崩溃(C++)?

c++ - 如何设置 2 个不同的 FBO 作为片段着色器输出

xml - 在 xpath 表达式中不使用命名空间

c++ - 访问头文件中定义的命名空间中的元素

php - 从包中找出 Laravel 5 应用程序命名空间

c++ - 编译器是否应该将 bool 中的任意非零值正确解释为 true?

c++ - 如何确定其他线程是否正在运行?

c++ - Qt5:使用 QSortFilterProxyModel 时拖放

c++ - 我如何制作一个允许所有左值引用、右值引用和 initializer_list 的模板化构造函数?