草庐IT

Templates

全部标签

c++ - 仿函数与模板参数

将模板参数与静态成员函数一起使用而不是仿函数式谓词是否有任何性能优势?例如,仿函数样式的排序接口(interface)通常是这样的:templatevoidsort(RandomAccessIteratorfirst,RandomAccessIteratorlast,_Predless_than){//actualsortingcodehere,callingless_than()...}你可以做更多类似的事情,并要求_Pred包含一个静态成员函数_Pred::less_than:templatevoidsort(RandomAccessIteratorfirst,RandomAcce

c++ - 如何定义一个模板类并将其分成多个文件?

我写了一个简单的模板类用于测试目的。它编译没有任何错误,但是当我尝试在main()中使用它时,它给出了一些链接器错误。ma​​in.cpp#include#include"MyNumber.h"intwmain(intargc,wchar_t*argv[]){MyNumbernum;num.SetValue(3.14);std::coutMyNumber.h#pragmaoncetemplateclassMyNumber{public:MyNumber();~MyNumber();voidSetValue(Tval);TGetValue();private:Tm_Number;};我的

C++编译器模板错误信息-解码错误信息的工具

全部,问题一在使用模板时,编译器错误信息被认为是非常神秘的(从某种意义上说,新手的眼睛不容易阅读)——尽管现在的编译器会尽力在编码问题期间放置尽可能多的信息。是否有可能-错误信息在某些编译器中比其他编译器更好?如果可以,请指导我哪个编译器提供更清晰的信息。问题二模板代码编译器错误解决的问题有两个——缺乏解码错误的经验/能力,以及对编译器的一些责备,因为它不能提供尽可能多的信息,这些信息可以被“人类逻辑解释”理解编译器中是否有任何工具/选项可以使其更具可读性?PS:目前我使用gcc4.1.2,较少使用XlC_r(版本6)和aCC(用于HP)提前感谢您的输入。

C++和const reference to temporary binding问题(在C++0X中实现D语言传值传引用规则)

我想知道可以在多大程度上模仿C++中按值传递和按引用传递规则的D语言规则。有关背景,请参阅以下两个引用资料(主要是Alexandrescu):http://bartoszmilewski.wordpress.com/category/d-programming-language/page/2/和http://groups.google.com/group/comp.std.c++/msg/303e3bf2407a7609?其中一个关键区别是,在D中,const引用不绑定(bind)(作为非const引用)到临时对象。但是,我不知道有什么方法可以定义泛型类X,从而导致以下代码无法编译:v

c++ - 为什么 std::queue 允许冗余类型规范?

STL库类std::queue的前向声明如下:namespacestd{template>classqueue}这意味着我们可以像这样声明一个具有不同类型规范的队列类型的对象:std::queue>string_queue;为什么这是可能的?像这样声明队列不是更安全吗:templateclassqueue_base{private:implementationm_impl;/*-----------------------------------------------------------*/public:typedefimplementationcontainer_type;ty

c++ - CRTP 容器

我正在学习一些模板编程,对此我还很陌生。我想要实现的是一些包含STL容器的CRTP类。让classA{};作为(编译时)基类的示例,classB{};和classC{};在编译时按照CRTP样式“派生”。现在B和C都将包含容器。为了示例的目的,让它分别是std::vector和std::set。现在,我想通过begin()和公开前向迭代器的end()函数公开这些迭代器。但是,我不想公开B和C中的确切容器是什么,我想为A定义这些函数,以便在调用时使用正确的B和C。这可能吗?现在我的计划是为B和C创建一个Iterator内部类,它包含(一个vector或一个vector)的实际迭代器视情况

c++ - 将类型解析为 class::typedef 的更短方法

我有几个类(class)。现在它们被一个符号隔开。其中很少包含type(typedef),也很少没有。structA{...public:typedefsomeclasstype;}structB{...};我想实现一个SFINAE以这样的方式上课,Resolve::typeo1;//shouldresolveto'A::type'Resolve::typeo2;//shouldresolveto'B'一种方法是使用上一个链接中所示的基本SFINAE,它检查T是否包含type,然后使用bool检查器.例如,templatestructhas_type{typedefcharyes[3]

c++ - 在不使用变量的情况下实例化 ifstream 对象

如果不将文件存储在变量中,我似乎无法打开它。我可以这样做:ifstreamblob("somefile");stringline;blob>>line;但是当我尝试这样做时:stringline;ifstream("somefile")>>line;编译器(clang)给出了这个错误:t.cpp:7:23:error:invalidoperandstobinaryexpression('ifstream'(aka'basic_ifstream')and'string'(aka'basic_string'))ifstream("thing")>>i;~~~~~~~~~~~~~~~~~^~

c++ - 智能指针作为多态性的类成员

我是智能指针的新手,如果有人可以提示我作为类成员处理智能指针的方式是否正确,我将不胜感激。更准确地说,我想要实现的解决方案是在类多态性的上下文中,理想情况下应该是异常安全的。给定一个containerofheterogeneuousobjects(std::vector>my_vector),通常添加元素的方式是:my_vector.push_back(shared_ptr(newCChild(1))),以便稍后可以通过以下方式调用特定派生类的成员函数:my_vector[0]->doSomething().我想要实现的是将堆栈对象添加到vector并且仍然能够进行多态性。直觉上……喜

c++ - sizeof... 是否允许在模板参数中用于特化?

我正在尝试使用GCC4.7快照做一些类似的事情:templatestructfoo{staticconstintvalue=0;};//partialspecializationwherenisnumberofintsinxs:templatestructfoo{//error:templateargument‘sizeof(xs...)’//involvestemplateparameter(s)staticconstintvalue=1;};templatestructfoo{//Thiscompilesfine.sizeof(xs)issizeofint//eventhoughp