gpt4 book ai didi

c++ - 是否可以为包中的每个参数声明一个方法?

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:16 24 4
gpt4 key购买 nike

例如:

template<class... keys>
struct{
{ virtual keys* getContents(foo* Foo) const = 0 }...;
}

或:

template<class... keys>
struct{
virtual bar* getBar( keys* Foo )... const = 0;
}

或者任何具有类似效果的东西?

最佳答案

函数或方法不能返回参数包。

一个函数可以返回一个std::tuple,但是:

template<class... keys>
struct something {
virtual std::tuple<keys...> getContents(foo* Foo) const = 0;
}

您还可以将此模板专门用于单个类型,并返回该类型而不是单元素元组;并将其专门用于空参数包,并返回 void

编辑:

你澄清了你的问题。您试图做一些不同的事情,您最初的解释有些离题,这是可以理解的。

您可以完成您想要的,但它有点复杂,并且需要递归模板和特化,但看起来这就是您想要的。

class bar;

template<typename ...Keys> struct getcontents_base;

template<>
struct getcontents_base<> {
};

template<typename firstKey, typename ...remainingKeys>
struct getcontents_base<firstKey, remainingKeys...>
: getcontents_base<remainingKeys...> {

virtual bar *getBar(firstKey *foo) const=0;
};

struct getcontents : public getcontents_base<int, char> {

bar *getBar(int *) const override {}
bar *getBar(char *) const override {}
};

struct notgetcontents : public getcontents_base<int, char> {};

void foo()
{
struct getcontents c; // This will compile fine.

struct notgetcontents c2; // This will result in a compilation error
// because the virtual methods have not
// been defined.
}

关于c++ - 是否可以为包中的每个参数声明一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083677/

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