假设我有一个这样的类型别名:
$x = 0;
foreach ($orderForPayment as $index => $item):
$items[$x] = new Item();
$items[$x]->setName($item['name'])
->setCurrency('GBP')
->setQuantity($item['qty'])
->setPrice($item['subtotal']);
$++;
endforeach;
除了Arg无效的情况外,它都可以正常工作:
template <typename Arg>
using Func = std::function<void(Arg)>;
第二个给出以下编译错误:
Func<int> f1;
Func<void> f2; // doesn't compile
如何为error: invalid parameter type ‘void’using Func = std::function<void(Arg)>;
error: in declaration ‘using Func = class std::function<void(Arg)>’
创建别名?
答案 0 :(得分:2)
您可以尝试添加一些模板专长:
template<typename T>
struct FuncImpl
{
using type = std::function<void(T)>;
};
template<>
struct FuncImpl<void>
{
using type = std::function<void()>;
};
template <typename Arg>
using Func = typename FuncImpl<Arg>::type;