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

问题描述 投票:0回答:2

我正在围绕 C++ 库创建 C 包装器。 执行此操作时常犯的一个错误是函数声明和定义由于某种原因(拼写错误、重命名、添加/删除参数等)不匹配。

例如:

// 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.

c++ visual-studio visual-studio-2015
2个回答
4
投票

你总是可以用括号括起declarator-id:

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

0
投票

另一种延迟指定返回类型的解决方案:

auto ::motek_mds_enable_data_is_enabled(const Data* a_Data) -> int32_t { ... }
© www.soinside.com 2019 - 2024. All rights reserved.