質問編集履歴
2
あ
title
CHANGED
File without changes
|
body
CHANGED
@@ -57,5 +57,32 @@
|
|
57
57
|
????どうにかしてコンストラクタの引数の型を取得する方法が知りたいです
|
58
58
|
????よろしくお願いいたします
|
59
59
|
|
60
|
+
---
|
61
|
+
|
62
|
+
**欲を言えば**```class A```に変更を加えずに取得したいです
|
63
|
+
|
64
|
+
```cpp
|
65
|
+
|
66
|
+
template <std::size_t N, typename Class, typename Return, typename ... Args>
|
67
|
+
constexpr auto getArgType(Return(Class::*)(Args...)) {
|
68
|
+
return std::tuple_element_t<N, std::tuple<Args...>>();
|
69
|
+
};
|
70
|
+
|
71
|
+
//class Aの記述はこのままに
|
72
|
+
struct A {
|
73
|
+
A(int) {}
|
74
|
+
void hoge(int) {}
|
75
|
+
};
|
76
|
+
|
77
|
+
int main() {
|
78
|
+
//ここで型を取得する処理
|
79
|
+
using ArgType = decltype(getArgType<0>(&A::A));
|
80
|
+
|
81
|
+
std::cout << typeid(ArgType).name();
|
82
|
+
}
|
83
|
+
|
84
|
+
```
|
85
|
+
|
86
|
+
|
60
87
|
## 環境
|
61
88
|
c++20
|
1
a
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
int main() {
|
21
21
|
using ArgType = decltype(getArgType<0>(&A::hoge));
|
22
22
|
|
23
|
-
std::cout << typeid(ArgType).name();
|
23
|
+
std::cout << typeid(ArgType).name();//出力 int
|
24
24
|
}
|
25
25
|
|
26
26
|
```
|