gpt4 book ai didi

c++ - std::function 参数类型

转载 作者:行者123 更新时间:2023-11-30 02:35:31 25 4
gpt4 key购买 nike

如果你勾选here ,你会看到 std::function 应该定义一些可选类型,为方便起见引用:

Member types
Type Definition
result_type R
argument_type T if sizeof...(Args)==1 and T is the first and only type in Args...
first_argument_type T1 if sizeof...(Args)==2 and T1 is the first of the two types in Args...
second_argument_type T2 if sizeof...(Args)==2 and T2 is the second of the two types in Args...

如何实现这一要求?我的第一个想法是有条件地继承为 2 种可能情况定义类型的结构,但是还有其他更好的方法来解决这个问题,不涉及继承吗?我对类型删除或 std::function 提供的任何其他功能不感兴趣。

最佳答案

如何根据模板参数专门化您的数据结构:

template <typename...Args>
struct test
{

};

template <typename Arg1, typename Arg2>
struct test<Arg1, Arg2> //specialization for sizeof...(Args)==2
{
using first_argument_type = Arg1;
using second_argument_type = Arg2;

};

template <typename Arg1>
struct test<Arg1> //specialization for sizeof...(Args)==1
{
using argument_type = Arg1;
};


int main()
{
//test<int, char, std::string>::argument_type t31; //NOK
//test<int, char, std::string>::first_argument_type t32; //NOK
//test<int, char, std::string>::second_argument_type t33; //NOK
//test<int, char>::argument_type t21; //NOK
test<int, char>::first_argument_type t22; //OK
test<int, char>::second_argument_type t23; //OK
test<int>::argument_type t11; //OK
//test<int>::first_argument_type t11; //NOK
//test<int>::second_argument_type t11; //NOK
return 0;
}

关于c++ - std::function 参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518724/

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