【发布时间】:2010-10-20 12:42:21
【问题描述】:
我正在尝试使用模板专业化来实现一个具有不同句柄的模板函数。
以下代码在 gcc 中为我提供了“非命名空间范围内的显式特化”:
template <typename T>
static T safeGuiCall(boost::function<T ()> _f)
{
if (_f.empty())
throw GuiException("Function pointer empty");
{
ThreadGuard g;
T ret = _f();
return ret;
}
}
// template specialization for functions wit no return value
template <>
static void safeGuiCall<void>(boost::function<void ()> _f)
{
if (_f.empty())
throw GuiException("Function pointer empty");
{
ThreadGuard g;
_f();
}
}
我已尝试将其移出类(该类未模板化)并移入命名空间,但随后出现错误“显式专业化不能具有存储类”。我已经阅读了很多关于此的讨论,但人们似乎不同意如何专门化功能模板。有什么想法吗?
【问题讨论】: