我不確定標準允許我嘗試什麼,甚至可能沒有意義,所以通過一切手段隨時糾正我。使用可變參數類型參數的變量函數
我試圖將一個可變數量的std::function
對象傳遞給接受可變參數的函數,並接受可變參數模板參數。模板參數指定返回類型中進行傳遞的功能函數的簽名看起來像這樣:
template <typename ... TRets>
void DoStuff(std::function<TRets...()> funcs...)
什麼我試圖做的是從每個funcs
傳入的傳遞返回值到另一個以擴展價值形式接受它們的函數。例如。 std::make_shared<TType>(funcs()...);
我正在使用g ++ 7.1.1和--std=c++17
標誌,導致編譯器發生故障。很明顯,它不應該排除故障,但是標準中是否有上述代碼無效的內容?或者,是否有不同的語法來完成這個目標?
爲了完整起見,這裏是一個最低限度的工作(對工作的一些定義)例如:
#include <functional>
#include <memory>
class MyClass {
public:
int m_a;
double m_b;
MyClass(int a, double b) : m_a(a), m_b(b) {};
};
template <typename TReturn, typename ... Args>
std::shared_ptr<TReturn> CallFunctions(std::function<Args...()> funcs...) {
// Do stuff here
return std::make_shared<TReturn>(funcs()...);
}
int main(int argc, char * argv[]) {
auto x = CallFunctions<MyClass, int, double>(
[]() { return 5; },
[]() { return 3.14; }
);
return 0;
}
編輯,以顯示我原來的問題的更好的意圖
你到底想幹什麼? – Justin
如果編譯器出現故障,您可能需要提交錯誤報告。 – Justin
您是否期望每個傳遞給'CallFunctions'的函數都不帶任何參數並返回一個值? – Justin