teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

最終的にやりたかったことはこれらの関数をクラスのメンバ関数にして実装することでした。クラスの形に修正しました。

2021/01/02 21:51

投稿

jbe00214
jbe00214

スコア63

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  テンプレート引数の正当性のチェックをarg_check関数で行いたいのですが,非型テンプレートパラメータパックの展開の方法がわかりません。
6
6
  以下のコードでは,arg_check関数を再帰関数として構成すると,おおよそこのような形だろうというところまで書いたものです。
7
7
 
8
- どなたかご教示いただける方よろしくお願いします。(当初のコードを修正しています。)
8
+ どなたかご教示いただける方よろしくお願いします。(当初のコードをクラスメンバ関数に修正しています。)
9
9
 
10
10
 
11
11
 
@@ -23,23 +23,27 @@
23
23
 
24
24
  constexpr int N=100;
25
25
 
26
+ struct Foo{
27
+ bool res=false;
26
- ///再帰 最後の関数
28
+ ///再帰 最後の関数
27
- bool constexpr arg_check(){return true;}
29
+ bool constexpr arg_check(){return true;}
28
- ///再帰関数
30
+ ///再帰関数
29
- template < int head, int... Tail>
31
+ template < int head, int... Tail>
30
- bool constexpr arg_check (head, int ...tail){///error
32
+ bool constexpr arg_check (head, int ...tail){///error
31
- static_assert(head < N);
33
+ static_assert(head < N);
32
- return arg_check(tail...);///error
34
+ return arg_check(tail...);///error
33
- }
35
+ }
34
36
 
35
- template<int ... args>
37
+ template<int ... args>
36
- auto constexpr func(){
38
+ auto constexpr func(){
37
- static_assert(arg_check(args));///error
39
+ static_assert(arg_check(args));///error
40
+ res=true;
38
- }
41
+ }
42
+ };
39
43
 
40
-
41
44
  int main(){
45
+ Foo f;
42
- func<200,10>();///200でエラーを検出したい
46
+ f.func<200,10>();///200でエラーを検出したい
43
47
  }
44
48
  ```
45
49
 

1

当初のコードでfunc関数とarg_check関数を上下入れ替えました。

2021/01/02 21:51

投稿

jbe00214
jbe00214

スコア63

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  テンプレート引数の正当性のチェックをarg_check関数で行いたいのですが,非型テンプレートパラメータパックの展開の方法がわかりません。
6
6
  以下のコードでは,arg_check関数を再帰関数として構成すると,おおよそこのような形だろうというところまで書いたものです。
7
7
 
8
- どなたかご教示いただける方よろしくお願いします。
8
+ どなたかご教示いただける方よろしくお願いします。(当初のコードを修正しています。)
9
9
 
10
10
 
11
11
 
@@ -22,10 +22,6 @@
22
22
  ```C++
23
23
 
24
24
  constexpr int N=100;
25
- template<int ... args>
26
- auto constexpr func(){
27
- static_assert(arg_check(args));///error
28
- }
29
25
 
30
26
  ///再帰 最後の関数
31
27
  bool constexpr arg_check(){return true;}
@@ -35,7 +31,13 @@
35
31
  static_assert(head < N);
36
32
  return arg_check(tail...);///error
37
33
  }
34
+
38
-
35
+ template<int ... args>
36
+ auto constexpr func(){
37
+ static_assert(arg_check(args));///error
38
+ }
39
+
40
+
39
41
  int main(){
40
42
  func<200,10>();///200でエラーを検出したい
41
43
  }