????こんにちは
メンバ関数の引数の型を取得する
tupleを使ってメンバ関数の引数の型を取得することに成功しました
cpp
1 2template <std::size_t N, typename Class, typename Return, typename ... Args> 3constexpr auto getArgType(Return(Class::*)(Args...)) { 4 return std::tuple_element_t<N, std::tuple<Args...>>(); 5}; 6 7struct A { 8 void hoge(int) {} 9}; 10 11int main() { 12 using ArgType = decltype(getArgType<0>(&A::hoge)); 13 14 std::cout << typeid(ArgType).name();//出力 int 15} 16
コンストラクタは関数ポインタが使えない
????しかしコンストラクタのアドレスは取得できないので渡すとエラーになります
cpp
1 2template <std::size_t N, typename Class, typename Return, typename ... Args> 3constexpr auto getArgType(Return(Class::*)(Args...)) { 4 return std::tuple_element_t<N, std::tuple<Args...>>(); 5}; 6 7struct A { 8 A(int) {} 9 void hoge(int) {} 10}; 11 12int main() { 13 using ArgType = decltype(getArgType<0>(&A::A)); 14 15 std::cout << typeid(ArgType).name(); 16}
E0424 コンストラクターまたはデストラクターのアドレスは取得できません
質問
????どうにかしてコンストラクタの引数の型を取得する方法が知りたいです
????よろしくお願いいたします
欲を言えばclass A
に変更を加えずに取得したいです
cpp
1 2template <std::size_t N, typename Class, typename Return, typename ... Args> 3constexpr auto getArgType(Return(Class::*)(Args...)) { 4 return std::tuple_element_t<N, std::tuple<Args...>>(); 5}; 6 7//class Aの記述はこのままに 8struct A { 9 A(int) {} 10 void hoge(int) {} 11}; 12 13int main() { 14 //ここで型を取得する処理 15 using ArgType = decltype(getArgType<0>(&A::A)); 16 17 std::cout << typeid(ArgType).name(); 18} 19
環境
c++20
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/17 16:14