C++将隐式构造限制为特定值

Any*_*orn 1 c++ templates constructor

假设:

struct P {
    P(int v);
};

int v;
P p = 0; // allow
P q = v; // Fail at compile time
Run Code Online (Sandbox Code Playgroud)

怎么能实现呢?任何模板技巧?

我正在尝试编写具有特殊指针属性的allocator.不幸的是,std实现使用从int到NULL指针的隐式转换:

{ return __n != 0 ? _M_impl.allocate(__n) : 0; }
Run Code Online (Sandbox Code Playgroud)

我的指针实现:http: //code.google.com/p/asadchev/source/browse/trunk/projects/boost/cuda/mapped_ptr.hpp

我的分配器实现:http: //code.google.com/p/asadchev/source/browse/trunk/projects/boost/cuda/allocator.hpp

我想使用原始指针强制显式构造,以避免令人讨厌的问题.

Joh*_*itb 6

你可以做到,但你不会喜欢它

struct P {
private:
    struct null_absorb;

public:
    P(null_absorb *v);
};

int v;
P p = 0; // allow
P q = v; // Fail at compile time
Run Code Online (Sandbox Code Playgroud)

这将只允许空指针常量.换句话说,零编译时间值.