如果没有调用某个函数,则禁止编译代码

ALE*_*NOV 2 c++ templates metaprogramming c++11

如果没有调用特定的函数,在C++中有没有办法禁止编译代码.

想象一下我有一些课:

class CExample
{
public:
    void Init();
    void DoWork();

};
Run Code Online (Sandbox Code Playgroud)

如果没有为类对象调用Init()函数,是否有办法禁止调用DoWork()

我想禁止写这样的代码:

CExample e;
e.DoWork();
Run Code Online (Sandbox Code Playgroud)

并允许此版本:

CExample e;
e.Init();
e.DoWork();
Run Code Online (Sandbox Code Playgroud)

我可以通过元编程以某种方式达到这种行为吗?

Che*_*Alf 12

你可以使用构造函数而不是Init.

在他的关于标准库异常安全,作为附录3音符的C++编程语言的版本,Bjarne的Stroustrup的讨论如何使用init功能是在带班不变的概念几率.它通常是Bad Practice™,主要是出于这个原因.

一些旧的GUI框架(如Microsoft的MFC)使用init函数来执行派生类特定的初始化.还有其他技术可以做到这一点,包括通过参数将所需信息传递给构造链.