gpt4 book ai didi

C++ 模板 : Accessing template variables

转载 作者:行者123 更新时间:2023-11-28 06:55:49 24 4
gpt4 key购买 nike

我是 C++ 世界的新手。

我正在尝试使用模板实现代码。

template<class PageType>
class Book
{
//implementation
public:
PageType* FreeQ; //holds the pointers to pages which are yet to be written
PageType* BusyQ; //holds the pointers to pages which are being written
PageType* DoneQ; //holds the pointers to pages which were written
getPagetoWrite(); //Get from FreeQ and put in BusyQ
setPageAsFree(); //Erase data and put in FreeQ
}

//example for PageType implementation
class PlasticType
{
mutex; // must
status; // must
*prev; // must
*next; // must
Write( );
Read();
}

我想知道是否有任何方式通知编译器执行了PageType 必须 包含将在类 Book 中使用的特定变量实现(在 getPagetoWritesetPageAsFree 中)而不创建 PageType 类型的实例.

希望我说清楚了。

最佳答案

我不认为可以强制 PageType 包含特定变量,这在模板实例化期间的编译时完成很简单 - 你真的不需要任何其他东西。您可以使用 C++11 std::is_base_of 通过 static_assert 强制您的 PageType 实现一些基类,您可以将 getPagetoWrite 和setPageAsFree,但您仍然必须实例化您的模板 - 这没关系。

#include <type_traits>

class Base {
};

class X : public Base {
};

class Z {
};

template <typename T>
class Foo {
static_assert(std::is_base_of<Base,T>::value,"must be derived from Base");
public:
Foo() {
}
};

int main(int argc, char** argv) {
Foo<Z> foo_z_type; // gives compile error: static assertion failed: must be derived from Base
Foo<X> foo_z_type; // OK
return 0;
}

http://coliru.stacked-crooked.com/a/bf91079681af3b0e

关于C++ 模板 : Accessing template variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23195745/

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