gpt4 book ai didi

推断类成员的 C++ 模板

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:34 25 4
gpt4 key购买 nike

我知道我可以使用模板来假设模板使用的某些类具有某些成员变量;但是,我想知道是否有一种方法可以显式声明模板类必须具有某个成员变量或函数?

我说的是这个例子:

template <typename T>
class Assume
{
int value;
Assume(T* object) : value(T->AssumedMember) {};
};


class A
{
int AssumedMember;
A(int val) : AssumedMember(val) {};
};


int main()
{
A* a = new A(5);
Assume<A> assumer(a);
return 0;
}

我知道,至少对于 MSVC++ 中使用的编译器,类似于此示例的内容应该可以毫无问题地编译;

我只是想知道是否有一种方法可以声明,对于模板或类的使用,来自类型名称 T 的 T 具有成员变量 AssumedMember。到目前为止,真正理解 Assume 仅在与具有正确必需成员(变量、函数或运算符)的类一起使用时才有效的唯一方法,要么必须编译并查看给定的编译器错误,要么自己通读整个模板,以确定是否使用了尚未定义的额外内容。

(另外,在不相关的说明中,有没有人知道一种方法可以将整个声明 block 声明为模板?好像使用类似的东西: template <typename T> { /*class... member definitions, etc..*/ }声明整个定义 block 以使用相同的模板?)

最佳答案

标准委员会一直致力于此功能,称为“概念”。但是,它没有进入 C++11。

但是,有两个编译器可以让它工作(具有各种功能)。看看ConceptGCCConceptClang .

关于推断类成员的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963897/

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