Visual Studio 函数定义上的全局命名空间作用域运算符

ezykj2lf  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(177)

我正在创建一个围绕C++库的C Package 器。在这样做时,一个常见的错误是由于某种原因(打字错误,重命名,添加/删除参数等),函数声明和定义不匹配。
例如:

// enabledata.h
MDS_C_API const char* motek_mds_enable_data_get_enable_command_name();

// enabledata.cpp
const char* motek_mds_enable_data_enable_command_name() { ... }

名称不匹配,但由于这些函数缺少作用域,因此不会导致任何编译错误,只会在很久以后显示为链接错误。
我希望编译器通过使用全局作用域操作符来帮助我找到这些错误,如下所示:

const char* ::motek_mds_enable_data_get_disable_command_name() { ... }

如果函数还没有被声明,这将显示为编译错误,这正是我想要的。
但是,当函数返回typedef时,这不起作用:

int32_t ::motek_mds_enable_data_is_enabled(const Data* a_Data) { ... }

这将导致尝试使用int32_t作为作用域,这当然会导致错误:

left of '::' must be a class/struct/union

有什么方法可以让这工作吗?当然,更好的替代品也是受欢迎的。
我目前正在使用Visual Studio 2015 Update 2。

fnx2tebb

fnx2tebb1#

您可以始终将 declarator-id 括在括号中:

int32_t (::motek_mds_enable_data_is_enabled)(const Data* a_Data) { ... }
//      ^                                  ^
izkcnapc

izkcnapc2#

另一种具有后期指定的返回类型的解决方案:

auto ::motek_mds_enable_data_is_enabled(const Data* a_Data) -> int32_t { ... }

相关问题