私が試していることが標準で許可されているかどうかわかりませんし、意味をなさないこともありますので、どうぞ私を修正してください。VariadicのVariadicタイプのパラメータのパラメータ
可変数の引数を受け付ける関数に可変数のstd::function
オブジェクトを渡そうとしています。また、可変のテンプレートパラメータも受け入れます。テンプレートパラメータは、渡された関数の戻り値の型を指定する関数のシグネチャはそうのようになります。私はしようとしてる何
template <typename ... TRets>
void DoStuff(std::function<TRets...()> funcs...)
は、渡されたfuncs
のそれぞれからの戻り値を渡すですそれらを拡張された値の形式で受け入れる別の関数に渡します。例えば。 std::make_shared<TType>(funcs()...);
コンパイラにsegフォールトを引き起こす--std=c++17
フラグを指定してg ++ 7.1.1を使用しています。明らかに、それはsegの誤りではありませんが、上記のコードが無効であることを標準で示していますか?または、おそらく、この目標を達成するための別の構文がありますか?
#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;
}
編集これはC++ 11である私の元の質問
何をしようとしていますか? – Justin
コンパイラがsegfaultingの場合、バグレポートを提出することができます。 – Justin
'CallFunctions'に渡されたすべての関数が引数を取らずに値を返すと思いますか? – Justin