【发布时间】:2016-02-23 21:33:09
【问题描述】:
如果没有调用特定函数,C++ 中有没有办法禁止代码编译。
假设我有一些课:
class CExample
{
public:
void Init();
void DoWork();
};
如果没有为类对象调用 Init() 函数,有没有办法禁止调用 DoWork()?
我想禁止写这样的代码:
CExample e;
e.DoWork();
并允许此版本:
CExample e;
e.Init();
e.DoWork();
我可以通过元编程以某种方式达到这种行为吗?
【问题讨论】:
-
能不能不把
Init的工作放到构造函数里面? -
我只是想知道我是否可以做到这一点。这不是我拥有的一些代码。
-
c++ 类不应该有 Init 函数(除非它们是私有的并且对调用者不可用)。 RAII 要求对象要么完全构造,要么抛出异常。这有充分的理由。
-
如果您没有自己的代码并且无法更改它,请编写一个包装器,在该包装器中在构造函数中调用 Init,而您是您的包装器而不是原始类。
-
为了编译或链接成功,要求调用函数当然不是语言规范的一部分。人们可能会修改编译器以执行您所描述的操作,但就像人们通常会避免将钉子钉入自己的眼睛一样,人们也会避免这样做。
标签: c++ templates c++11 metaprogramming