如何防止 C++ 中不同别名类型的组合?
How to prevent combination of different alias type in c++?
有什么方法可以防止在 C++ 中混合实际上引用相同底层类型的两个不同别名类型?
例如,对于以下(虽然有效)程序,我想得到一个带有 g++
的编译警告:
using TypeA = float;
using TypeB = float;
void foo(TypeA a) {}
int main()
{
TypeB b;
foo(b); // valid but how to get a warning?
return 0;
}
不幸的是,-Wall
、-Wextra
或 -pedantic
都没有对此发出警告。
我正在寻找适用于别名类型的解决方案(我不必创建两个 类 TypeA
和 TypeB
)。
不,应该不可能。别名不是类型,而是 "aliases" 的同义词。这意味着它们的目的是无法区分与它们别名的类型。类型别名没有自己的标识。
评论中提到BOOST_STRONG_TYPEDEF实际上创建了新类型,可以在函数重载等过程中与其他类型区分开来。
阅读更多:
有什么方法可以防止在 C++ 中混合实际上引用相同底层类型的两个不同别名类型?
例如,对于以下(虽然有效)程序,我想得到一个带有 g++
的编译警告:
using TypeA = float;
using TypeB = float;
void foo(TypeA a) {}
int main()
{
TypeB b;
foo(b); // valid but how to get a warning?
return 0;
}
不幸的是,-Wall
、-Wextra
或 -pedantic
都没有对此发出警告。
我正在寻找适用于别名类型的解决方案(我不必创建两个 类 TypeA
和 TypeB
)。
不,应该不可能。别名不是类型,而是 "aliases" 的同义词。这意味着它们的目的是无法区分与它们别名的类型。类型别名没有自己的标识。
评论中提到BOOST_STRONG_TYPEDEF实际上创建了新类型,可以在函数重载等过程中与其他类型区分开来。
阅读更多: