質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1205閲覧

非型テンプレートのパラメータパックの展開について

jbe00214

総合スコア63

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/01/02 15:38

編集2021/01/02 21:51

前提・実現したいこと

パラメータパックについての解説は多いのですが,非型テンプレートのパラメータパック展開については,ほとんど見つかりませんでした。以下のモデルを作ってコンパイル時にテンプレート引数のチェックをしようと思っていますが,うまくコードが作れません。

テンプレート引数の正当性のチェックをarg_check関数で行いたいのですが,非型テンプレートパラメータパックの展開の方法がわかりません。
以下のコードでは,arg_check関数を再帰関数として構成すると,おおよそこのような形だろうというところまで書いたものです。

どなたかご教示いただける方よろしくお願いします。(当初のコードをクラスメンバ関数に修正しています。)

発生している問題・エラーメッセージ

Use of undeclared identifier 'arg_check' Expected '(' for function-style cast or type construction

該当のソースコード

C++

1 2constexpr int N=100; 3 4struct Foo{ 5 bool res=false; 6 ///再帰 最後の関数 7 bool constexpr arg_check(){return true;} 8 ///再帰関数 9 template < int head, int... Tail> 10 bool constexpr arg_check (head, int ...tail){///error 11 static_assert(head < N); 12 return arg_check(tail...);///error 13 } 14 15 template<int ... args> 16 auto constexpr func(){ 17 static_assert(arg_check(args));///error 18 res=true; 19 } 20}; 21 22int main(){ 23 Foo f; 24 f.func<200,10>();///200でエラーを検出したい 25}

補足情報(FW/ツールのバージョンなど)

clang
c++17

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下で普通にできました。

C++

1constexpr int N=100; 2template < typename ... Pack> 3static bool constexpr arg_check (Pack ...pack){ 4 for(auto p:{pack...}) 5 if(p >= N) return false; 6 return true; 7} 8 9 10template<int ... args> 11void constexpr func(){ 12 static_assert( arg_check(args...)); 13} 14

投稿2021/01/02 20:48

編集2021/01/02 22:11
jbe00214

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問