質問編集履歴

1

内容が書かれていなかった

2021/06/01 21:06

投稿

jbe00214
jbe00214

スコア63

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  コンパイル時に解決できることは,可能な限り型関数を使おうと思っています。
4
4
 
5
- そこで,テンプレートクラス型と一致することをコンパイル時に確認する方法を考えています。テンプレート引数型は一致しなくても良いものとします。is_same_vを使ってコード例のように作成したのですが,うまくいきません。
5
+ 課題となっているのは,テンプレートクラス型と一致するか否かをコンパイル時に確認する方法す。テンプレート引数型は一致しなくても良いものとし,クラス名が一致するか否かを検出します。is_same_vを使ってコード例のように作成したのですが,うまくいきません。以下の「試したこと」のように,メンバを含めないと機能するので何かヒントがあるのかと思っておりますが,わかりませんでした。is_same_vにはこだわらないのですが,何か解決方法がわかる方がおられれば教えていただければと思います。単純な方法で解決できそうな気がするのですが。
6
6
 
7
7
 
8
8
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  ```
14
14
 
15
- エラーメッセージ
15
+ Static_assert expression is not an integral constant expression
16
16
 
17
17
  ```
18
18
 
@@ -22,9 +22,51 @@
22
22
 
23
23
 
24
24
 
25
- ```ここに言語名を入力
25
+ ```C++
26
26
 
27
+ template<typename T,size_t N>
28
+
27
- ソースコード
29
+ class foo{
30
+
31
+ std::array<T,N> ar;
32
+
33
+ };
34
+
35
+ template<typename T,size_t N>
36
+
37
+ class boo{
38
+
39
+ std::array<T,N> ar;
40
+
41
+ };
42
+
43
+
44
+
45
+ template <typename T,size_t N,template<typename,size_t>class FOO>
46
+
47
+ constexpr bool foo_type(FOO<T,N>)
48
+
49
+ {
50
+
51
+ return is_same_v<FOO<T,N>, foo<T,N>>;
52
+
53
+ }
54
+
55
+
56
+
57
+ int main(){
58
+
59
+ foo<int,2> f;
60
+
61
+ boo<int,2> b;
62
+
63
+
64
+
65
+ static_assert( foo_type(f) );
66
+
67
+ static_assert( !foo_type(b) );
68
+
69
+ }
28
70
 
29
71
  ```
30
72
 
@@ -34,7 +76,19 @@
34
76
 
35
77
 
36
78
 
37
- ここ問題に対して試したこを記載してください
79
+ 以下のようメンバを書かない,型関数として機能する
80
+
81
+ ```C++
82
+
83
+ template<typename T,size_t N>
84
+
85
+ class foo{};
86
+
87
+ template<typename T,size_t N>
88
+
89
+ class boo{};
90
+
91
+ ```
38
92
 
39
93
 
40
94
 
@@ -42,4 +96,6 @@
42
96
 
43
97
 
44
98
 
45
- ここにより詳細な情報を記載してください。
99
+ clang
100
+
101
+ c++17