クラステンプレートのインスタンス化からテンプレートパラメータを推測する方法を知っています。
template <typename T>
struct foo {};
template <typename T>
struct foo_param;
template <typename T>
struct foo_param< foo<T> > {
using type = T;
};
しかし、私は関数テンプレートに対して同じことをすることに迷っています。ナイーブ
template <typename T>
void bar() {}
template <auto F>
struct bar_param;
template <typename T>
struct bar_param< &bar<T> > {
using type = T;
};
で失敗する
<source>:21:19: error: template argument '& bar<T>' involves template parameter(s)
21 | struct bar_param< &bar<T> > {
| ^~~~~~~
私はエラーを理解していると思いますが(実際には理解していなかったことが判明しましたが、それは別の質問の場合です)、それを回避する方法がわかりません。方法を推論例えば私がすることができますint
与えられましたか&bar<int>
?
何が欲しいのかは不可能だと思います。
少なくとも、の型はbar<T>
すべての型でまったく同じであるため、関数の型を通過しませんvoid
。引数のない戻り関数です。
簡単な方法でこれを確認できます static_assert()
static_assert( std::is_same_v<decltype(bar<int>), decltype(bar<long>)> );
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加