如果一个类被实例化多次,是否有一种“标准”方法来生成编译器警告?

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

我有一个控制一组设备的类。 99% 的情况下,只会创建该类的一个实例,但时常需要实例化两个副本(其中使用两组独立的设备)。后一种情况并不经常发生,但偶尔需要,所以我不能只使用单例模式。

但是,我希望通过在检测到多个实例化时(最好是在编译时)显示警告来防止开发人员意外执行此操作。一位同事建议这可以通过 C++ 模板元编程来实现,但我在任何地方都找不到示例。

在运行时相当容易做到,但编译时间似乎更具挑战性。

c++ c++11 instantiation
1个回答
0
投票

据我所知,发出编译器警告的唯一方法(除了编写编译器扩展之外)是通过预处理器,

#warning
#pragma message
。您不能混合预处理器指令和模板元编程条件,它们只是不以这种方式交互。

如果您确实想在编译时做某事,我会要求定义一个特定的符号,以便生成实例化多个方法的代码。当这个符号没有定义时,该类的行为就像一个单例,但是当它被定义时,您将启用允许实例化类的多个实例的代码,并且您还可以发出警告: class Foo { Foo* makeFoo(); #ifdef ALLOW_MULTIPLE_FOO #warning "You are compiling in allow-multiple-foo mode. Please only do this if you know what you're doing" Foo* makeAnotherFoo(); #endif private: Foo() }

© www.soinside.com 2019 - 2024. All rights reserved.