变量模板参数中的Decltype

时间:2013-12-28 22:47:07

标签: c++ c++11

我正在使用unique_ptr等处理一些代码。该行是:

std::unique_ptr<char[], void(*)(void*)> result(..., std::free);

哪个有效。我意识到std :: free给出的类型是第二个模板参数。我尝试使用:

std::unique_ptr<char[], decltype(std::free)> result(..., std::free);

这将更容易阅读,并且不易出错。但是我收到与<memory>和&#34相关的错误;用函数类型&#34;实例化数据成员。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:12)

decltype(std::free)产生std::free的类型,它是函数类型void(void*),而不是函数指针类型void(*)(void*)。您需要一个函数指针类型,您可以通过获取std::free

的地址来获取该类型
std::unique_ptr<char[], decltype(&std::free)> result(..., std::free);
                               ^

或通过自己形成函数指针类型:

std::unique_ptr<char[], decltype(std::free)*> result(..., std::free);
                                         ^

(我认为前者更清楚。)