以下是否會導致明確的行爲?也就是說,如果您將非可變參數函數f作爲可變參數函數g並使用f期望的參數調用g,那麼行爲是否與使用這些參數調用f的行爲相匹配?C++可變參數函數指針
class Base {};
class Derived1 : public Base {
public:
int getInt1() {return 1;}
};
class Derived2 : public Base {
public:
int getInt2() {return 2;}
};
typedef int (*vfunc)(...);
int foo (vfunc f) {
Derived1 d1;
Derived2 d2;
return f(&d1, &d2);
}
int bar (Derived1 * p1, Derived2 * p2) {
return p1->getInt1() + p2->getInt2();
}
int main (int argc, char ** argv) {
return foo((vfunc)bar); // Is this program guaranteed to return 3?
}
UPDATE
有一些辦法可以讓程序得到很好的界定,即使使用專有的關鍵字?比如做喜歡這裏提到的__cdecl
一些東西:
http://msdn.microsoft.com/en-us/library/984x0h58%28v=vs.80%29.aspx
我的最終目標是擁有一個matcher
功能,試圖X指針的列表匹配。匹配器函數接受一個謂詞(不一定是一個函數...可能是一個列表),並接受一個函數,它會將匹配的結果傳遞給它。傳遞給它的回調函數採用與謂詞匹配相同的參數類型和參數。
我相信並期待答案是這是未定義的行爲。 –
當你說「專有關鍵字」時,你是什麼意思?您定位的是什麼編譯器(以及版本和設置)?你打開其他更好的解決方案(如'std :: function')嗎? –
像Visual Studio中的__cdecl一樣的東西。我也開放其他解決方案。 –