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函数来执行派生类特定的初始化.还有其他技术可以做到这一点,包括通过参数将所需信息传递给构造链.