强制模板化构造函数运行
Force Templated Constructor to Run?
我知道有一个initailzer技巧可以强制构造全局对象,而不管它在哪里使用。我相信这是用于std::cout的。
#ifndef GUARD_H
#define GUARD_H
class Magical
{
// default constructor and such...
};
class Init
{
public:
Init();
};
extern Magical& magic;
namespace
{
Init __magical_initializer; // works as this object is constructed in every source file it is included in
}
#endif
src:
#include "magical.h"
#include <new>
static int count; // believe there is a spec somewhere which states global integers are initialized with zero
static alignas(Magical) char buffer[sizeof(Magical)];
Magical& magic = *reinterpret_cast<Magical*>(buffer);
Init::Init()
{
if(!count++)
{
new(buffer) Magical;
}
}
我想知道是否有一个类似的模板,因此我的代码看起来像这样:
template<typename T>
class Base
{
static Magical<T> __private; // need this constructor to be called.
};
// usage:
class SomeClass : public Base<SomeClass>
{
};
没有办法解决这个问题,因为源文件中不可能存在模板。
相关文章:
- 让某个类的 '=' 运算符在声明时运行构造函数
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 如何在全局变量的构造函数之前运行函数
- 从类重载的新运算符运行非默认构造函数
- 运行 std::线程不在构造函数中
- C++:链接库两次,全局构造函数运行两次吗?
- C 从类的构造函数运行Boost线程
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 是否可以在运行时切换到不同的基类构造函数?
- 为什么在C 类构造函数的正确编译后发生运行时错误
- C 复制构造函数产生运行时错误
- 如何使用 Thread 运行类构造函数
- 如何在运行时使用构造函数初始化类中私有的数组
- C 构造函数运行时/编译时间
- 不带操作员的对象的数组初始化,复制构造函数或默认构造函数和运行时参数
- C ++ porgram 不会运行,我的构造函数是否有错误
- C++ 在超类构造函数中运行依赖于子类覆盖的大量变量的代码的正确方法是什么?
- 无法让构造函数运行
- 当构造函数运行结束时,指针变为空
- 强制模板化构造函数运行