确定C ++类是否具有私有析构函数

时间:2014-08-14 20:46:16

标签: c++ c++11 destructor private

我们说我有以下代码:

class Example
{
#ifndef PRIVATE_DESTRUCTOR
public:
#endif
    ~Example() { }
public:
    friend class Friend;
};

class Friend
{
public:
    void Member();
};

void Friend::Member()
{
    std::printf("Example's destructor is %s.\n",
        IsDestructorPrivate<Example>::value ? "private" : "public");
}

是否可以实施上面的IsDestructorPrivate模板来确定某个类的析构函数是private还是protected

在我使用的情况下,我需要使用此IsDestructorPrivate的唯一时间是在有权访问此类私有析构函数的位置(如果存在)。它并不一定存在。 IsDestructorPrivate允许是宏而不是模板(或者是解析为模板的宏)。 C ++ 11很好。

1 个答案:

答案 0 :(得分:10)

您可以使用std::is_destructible类型特征,如下例所示:

#include <iostream>
#include <type_traits>

class Foo {
  ~Foo() {}
};

int main() {
  std::cout << std::boolalpha << std::is_destructible<Foo>::value << std::endl;
}

LIVE DEMO

如果std::is_destructible<T>::value的析构函数为falseTdeleted,则

private将等于true