gpt4 book ai didi

c++ - 实用的 C++ 元编程

转载 作者:可可西里 更新时间:2023-11-01 17:37:52 26 4
gpt4 key购买 nike

我刚看了《实用C++元编程》这本书,它有下面的例子,我无法编译。你能帮我解决这个问题吗?

template <typename F>
struct make_tuple_of_params;

template <typename Ret, typename... Args>
struct make_tuple_of_params<Ret (Args...)>
{
using type = std::tuple<Args...>;
};

template <typename F>
using make_tuple_of_params_t = typename make_tuple_of_params<F>::type;

template<typename F>
void some_magic_function(F callable)
{
make_tuple_of_params_t<F> tuple;
/*
... do something with arguments in tuple...
*/
}

int main()
{
some_magic_function([] (int, double, float) {});
}

我收到一条编译错误消息:“type”不是“make_tuple_of_params”的任何直接或间接基类的成员。它看起来像 SFINAE 没有按预期工作,因为选择了默认结构。我该如何解决这个问题?

最佳答案

[](int、double、float){} 的类型是main 本地的未命名类类型,称为闭包类型。 em> 它绝对不是 void (int, double, float);它实际上根本不是函数类型。因此,函数类型的特化不适用,并且选择主模板。 (请注意,您的代码中不涉及任何 SFINAE)。

至于如何解决这个问题:我认为没有完全通用的解决方案。对于特定的 some_magic_function 可能有解决方案/解决方法,但这取决于您需要该函数执行的操作。

关于c++ - 实用的 C++ 元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40868192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com