如何防止 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 都没有对此发出警告。

我正在寻找适用于别名类型的解决方案(我不必创建两个 类 TypeATypeB)。

不,应该不可能。别名不是类型,而是 "aliases" 的同义词。这意味着它们的目的是无法区分与它们别名的类型。类型别名没有自己的标识。

评论中提到BOOST_STRONG_TYPEDEF实际上创建了新类型,可以在函数重载等过程中与其他类型区分开来。

阅读更多: