C 中 可以將 不同型別的函式指標 放在 同乙個vector中嗎?

時間 2021-05-29 22:20:17

1樓:劉春雷

我覺得可以這樣子,對於引數不同的函式:

方法1:

假如有2個函式fun1, fun2 這兩個函式的引數不同,可以利用多型將這兩個函式變成相同的格式

std::string fun1(std::string str1);

std::string fun2(std::string str1,std::string str2);

可以利用多型,函式引數都變成基類的指標

std::string fun1(CBasePara* para);

std::string fun2(CBasePara* para)

在函式fun2中,將父類指標轉換為子類指標,這樣fun2 就可以呼叫str1和str2了

#include

#include

#include

class CBasePara

};class CPara1:public CBasePara ;

std::string fun1(CBasePara* base)

std::string fun2(CBasePara* para)

using pfunc1=std::function;

using pfunc2=std::function;

int main()

方法二:

將所有的引數抽出到乙個並集到Struct中

struct Paras ;

那麼函式fun1和fun2就可以變為

std::string fun1(Paras* para);

std::string fun2(Paras* para);

2樓:

可以造乙個vector of void ptr 或者 vector of abstract class (polymorphism)或者用c++自帶的 union

3樓:Milo Yip

如果引數數目和型別相同,而不同型別是指自由函式、成員函式、lambda等,那麼可以用 std::function。

如果都不一樣,那麼應該可用 C++17 的 std::variant 或 std::any 去儲存不同引數型別的 std::function。

C 容器怎麼存放不同型別的值?

型別擦除 template Ret,typename Args class Drived public Base virtual Drived virtual void Fun final Ret func Args class Base virtual Base virtual void Fun ...

C 中如何判斷乙個變數的型別是否為指標?

我覺得題主應該是之前學過某種動態型別的語言 比如python js 想要學C C 於是才會有這個疑問吧?C或者C 屬於靜態型別語言,你一般不會遇到這個問題,至少目前應該是不會,因為乙個變數在傳遞過程中你必須要明確他的型別,那你怎麼可能不知道它是不是指標?比如說你在題目中說的 fun A 在C和C 中...

C語言中指標的型別在彙編中是如何表示的?

組合語言。組合語言一般確實沒有指標或位址這樣的資料型別,但是基本都會有一些基本的資料型別來容納指標或位址的值。具體到80x86彙編,就可以通過偽指令按位元組 字 雙字 四字甚至來定義資料項,這些資料項就可以用來容納指標或位址的值。不過,這些指標或位址的值在匯程式設計序中往往無法直接使用,需要將這些值...