我工作出於以下,這似乎是伎倆。仍有意改善的答案,雖然:
有我有點疑惑就是爲什麼在構造函數中使用「combiner_type」的要求在類型聲明中明確的範圍界定
namespace bs2 = boost::signals2;
template <
typename Signature,
typename A1 = boost::parameter::void_,
typename A2 = boost::parameter::void_,
typename A3 = boost::parameter::void_,
typename A4 = boost::parameter::void_,
typename A5 = boost::parameter::void_,
typename A6 = boost::parameter::void_
>
struct my_signal_type : public bs2::signal_type<Signature, A1, A2, A3, A4, A5, A6>
{
typedef typename boost::parameter::value_type<args, bs2::keywords::tag::mutex_type, my_mutex>::type mutex_type;
typedef bs2::signal<
signature_type,
combiner_type,
group_type,
group_compare_type,
slot_function_type,
extended_slot_function_type,
mutex_type
> type;
};
template <
typename Signature,
typename A1 = boost::parameter::void_,
typename A2 = boost::parameter::void_,
typename A3 = boost::parameter::void_,
typename A4 = boost::parameter::void_,
typename A5 = boost::parameter::void_,
typename A6 = boost::parameter::void_
>
class MyEvent : public my_signal_type<Signature, A1, A2, A3, A4, A5, A6>::type
{
public:
typedef typename my_signal_type<Signature, A1, A2, A3, A4, A5, A6>::type base_type;
explicit MyEvent(const typename base_type::combiner_type& combiner = combiner_type())
: base_type(combiner)
{
}
};
一兩件事 - 然後它不爲默認參數。 (在這裏刪除「typename」或「base_type ::」觸發標準的「default-int」錯誤(這意味着「看起來不像我知道的類型」)。這很奇怪,因爲它在基類中定義我猜這是一些奇怪的模板部分實例化的東西。