1

たとえば、戻り値の型が X で入力パラメーター &Y を受け入れる関数へのポインターを宣言する一般的な形式は何ですか?

それは...ですか:

X my_function(Y &y){
    //code
}

X (*my_pointer) (Y &y) = my_function;

?

4

3 に答える 3

4
X (*fptr)(Y&) = my_function;

または:

auto fptr = my_function; // c++11

または:

std::function<X(Y&)> fptr(my_function); // c++11, boost::function if not
于 2013-05-18T18:46:50.577 に答える
2

あなたが書いたものはOKですが、その型の関数ポインタを宣言したいだけなら、通常は関数引数の名前を書きません:

X (*my_pointer) (Y&) = my_function;

好みに応じて、より C++11 っぽく書きたいと思うかもしれません:

#include <type_traits>

std::add_pointer<X(Y&)>::type my_pointer = my_function;

テンプレート エイリアスを使用すると、さらに読みやすくなります。

#include <type_traits>

template<typename T>
using AddPointer = typename std::add_pointer<T>::type;

AddPointer<X(Y&)> my_pointer = my_function;

または、 hmjd が回答で示唆しているようautoに、関数型に明示的に名前を付けることを使用して忘れることさえあります。後でタイプを取得する必要がある場合は、次のようにすることができます。

decltype(my_pointer)
于 2013-05-18T18:47:51.630 に答える
0
  • それは...ですか:

    X my_function(Y &y){
       //code
    }
    
    X (*my_pointer) (Y &y) = my_function;
    

    ?

はい

于 2013-05-18T18:49:07.400 に答える