1
我試圖擴展Can I use decltype (or something similar) for explicit template instantiation without signature duplication?以使用模板成員函數,但我沒有運氣。目前嘗試使這項工作看起來像:使用帶有宏的decltype用於類成員函數的顯式實例化
// header
struct my_class
{
template <typename T>
some_type my_func(T val);
};
//source
template <typename T>
some_type my_class::my_func(T val)
{
....
}
// attempt a
template decltype(my_class::my_func<int>) my_class::my_func<int>;
// attempt b
template std::remove_pointer<decltype(&my_class::my_func<int>)>::type my_class::my_func<int>;
這可能嗎?如果是這樣,關於我如何能做到這一點的任何想法?
編輯:
所以看來這僅需要在鐺或GCC 6.1以上可用一些編譯器的更新。通過@yakk提供下面的代碼會爲const的方法的工作:
template <class T>
struct pointer_to_member_function{};
template <typename pmf_t>
using pointer_to_member_signature
= typename pointer_to_member_function<pmf_t>::signature;
template <class ret_t, class class_t, class...args>
struct pointer_to_member_function<ret_t(class_t::*)(args...) const>
{
using signature = ret_t(args...) const;
};
但是,下面的修改不會在所有的常量性編譯:
template <class function_t, class class_t>
struct pointer_to_member_function<function_t class_t::*>
{
using signature = function_t;
};
這適用於非const成員函數,但在const限定時崩潰。我沒有與const專業化運氣。想法? – mgoldman
@mgoldman已更新 – Yakk
它似乎只適用於clang和gcc 6.1+?對於較小的gcc版本,這裏缺少什麼語言要求?請參閱https://godbolt.org/g/kWWP7p – mgoldman