编译期约束(1)

                  为了在运行期减少应类型安全而导致的程序崩溃,我们回使用断言和一些模板元编程来进行编译期的类型检测。

                  判断一个类型是否是POD(plain old data 的缩写,一个普通的古老的数据结构(POD)是一种数据结构。它仅作为被动的收藏的字段值,不使用封包或者otherobject-oriented特征。)              

template <typename T>
struct must_be_pod
{
    must_be_pod() {
        void (*p)() = constraints;
    }
    static void constraints() {
        union {
            T T_is_not_pod;
        };
    }
};
class node
{
public:
    node() {}
    int operator[](int index) const {
        return 0;
    }
};

int main()
{
  //  must_have_base<father,children> a;
  //  must_be_subscriptable<char[]> a;
    must_be_pod<node> a;
    //must_be_subscriptable_as_decayable_pointer<int*> a;
    cout << "Hello World!" << endl;
    return 0;
}









你可能感兴趣的:(编译期约束(1))