[英]Issue with function pointers in C++
我打算使用函數指針在類中實現不同的函數。 但是,在嘗試實現一個這樣的功能時,我遇到了一些麻煩。
代碼在這里:
std::vector<int> * (*create_vector)()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
錯誤如下:
3: [Error] expected primary-expression before '*' token
3: [Error] 'vec_p' was not declared in this scope
3: [Error] expected '}' before ';' token
4: [Error] expected unqualified-id before 'return'
5: [Error] expected declaration before '}' token
有什么我誤解了函數指針,還是一個不同的問題?
std::vector<int> * (*create_vector)()
聲明一個指向函數的指針。 一個指針。 不是功能。 你不能繼續使用指針並假裝它是一個函數並定義它的主體。 您需要單獨聲明兩者:
std::vector<int> * create_vector()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
std::vector<int> * (*pcreate_vector)() = create_vector;
您不能同時聲明函數和函數指針。
只需定義您的功能:
std::vector<int>* create_vector()
{
std::vector<int>* vec_p = new std::vector<int>;
return vec_p;
}
然后,最好是制作一個typedef(代碼可讀性):
typedef std::vector<int>* (*create_vector_func)();
現在你可以使用它:
create_vector_func myFunc = &create_vector;
實現了函數,函數指針可以指向函數。 函數指針本身未實現。
改成:
std::vector<int>* create_vector()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
然后你可以聲明一個指向create_vector()
的函數指針。 使用typedef
可以簡化管理函數指針:
typedef std::vector<int>* (*func_t)(); // C++03
typedef decltype(&create_vector) func_t; // C++11
func_t f = create_vector;
auto f = create_vector; // C++11 option also.
如果可能,請避免動態分配,因為它會增加復雜性,使代碼更容易出錯。 在C ++ 11中,引入了移動語義,因此在這種情況下返回值的成本顯着降低,因為名為vec_p
的vector
將從(當它到期時) 移動而不是從中復制。 如果必須動態分配使用一種形式的智能指針 。
這不是您定義函數指針的方式。 首先使用您擁有的主體定義函數,然后將其指定給函數指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.