Tag: 模板

C ++获取模板中的types名称

我正在写一些模板类来parsing一些文本数据文件,就像这样,绝大多数parsing错误是由于数据文件中的错误造成的,而这些错误大部分都不是程序员写的,所以需要一个很好的消息,为什么应用程序未能加载,如: parsingexample.txt时出错。 [MySectiom]键的值(“notaninteger”)不是有效的int 我可以从传递给模板函数和类成员variables的参数中创build文件,节和键名称,但是我不知道如何获取模板函数试图转换的types的名称。 我目前的代码看起来像专门为简单的string和这样的: template<typename T> T GetValue(const std::wstring &section, const std::wstring &key) { std::map<std::wstring, std::wstring>::iterator it = map[section].find(key); if(it == map[section].end()) throw ItemDoesNotExist(file, section, key) else { try{return boost::lexical_cast<T>(it->second);} //needs to get the name from T somehow catch(…)throw ParseError(file, section, key, it->second, TypeName(T)); } } 而不必为数据文件可能使用的每种types制定特定的重载,因为它们有负载… 此外,我需要一个解决scheme,不会产生任何运行时间的开销,除非发生exception,即完全编译时解决scheme是我想要的,因为这个代码被称为吨的时间和加载时间已经有点长。 编辑:好吧,这是我想出的解决scheme: 我有一个types.h包含以下内容 #pragma once template<typename T> […]

自动select一个足够容纳指定数字的variablestypes

有没有什么办法在C ++中定义一个足够大的types来保存至多一个特定的数字,大概是使用一些聪明的模板代码。 例如,我想能够写: – Integer<10000>::type dataItem; 并有这种typesparsing为最小的types足够大,以保持指定的值? 背景:我需要使用来自外部数据文件的脚本来生成一些variables定义。 我想我可以让脚本看看值,然后根据值使用uint8_t , uint16_t , uint32_t等等,但是看起来更优雅的是将大小构build到生成的C ++代码中。 我看不出有什么办法可以做到这一点,但知道C ++模板,我敢肯定有一种方法。 有任何想法吗?

std :: function的模板参数是如何工作的? (实现)

在Bjarne Stroustrup的主页( C ++ 11 FAQ )中: struct X { int foo(int); }; std::function<int(X*, int)> f; f = &X::foo; //pointer to member X x; int v = f(&x, 5); //call X::foo() for x with 5 它是如何工作的? std :: function如何调用foo成员函数 ? 模板参数是int(X*, int) ,是从成员函数指针转换成非成员函数指针的 &X::foo ? (int(*)(X*, int))&X::foo //casting (int(X::*)(int) to (int(*)(X*, int)) 澄清:我知道我们不需要使用任何指针来使用std :: function […]

Eric Niebler如何实现std :: is_function?

上周,Eric Niebler为std::is_function traits类推送了一个非常紧凑的实现: #include <type_traits> template<int I> struct priority_tag : priority_tag<I – 1> {}; template<> struct priority_tag<0> {}; // Function types here: template<typename T> char(&is_function_impl_(priority_tag<0>))[1]; // Array types here: template<typename T, typename = decltype((*(T*)0)[0])> char(&is_function_impl_(priority_tag<1>))[2]; // Anything that can be returned from a function here (including // void and reference types): template<typename T, typename = […]

显式实例化 – 何时使用?

rest了几个星期后,我试图用David Vandevoorde和Nicolai M. Josuttis的“ 模板 – 完整指南”来扩展和扩展我对模板的了解,现在我想明白的是模板的显式实例化。 我实际上没有这个机制的问题,但我无法想象我想要或想要使用此function的情况。 如果有人能向我解释,我将不胜感激。

推荐2012年的jQuery模板?

jQuery模板现在已经被弃用了一段时间了。 我有一些JavaScript对象的forms的数据,我想格式化为HTML并附加到DOM。 这些日子最好的办法是什么? 我应该build立一个HTMLstring? 我应该通过jQuery创build元素,如$('<li>',{id:'my-'+Id}).append($('<span>').text(myText)) ? 有jQuery模板的替代或成熟的替代品吗?

将C ++模板参数限制为子类

我怎样才能强制模板参数T是一个特定的类Baseclass的子类? 像这样的东西: template <class T : Baseclass> void function(){ T *object = new T(); }

Djangodebugging显示页面的所有variables

有一个模板标签(或任何其他技巧),我可以用来显示页面中可用的所有variables?

为什么模板参数replace的顺序很重要?

C ++ 11 14.8.2 – 模板参数推导 – [temp.deduct] 7replace发生在函数types和模板参数声明中使用的所有types和expression式中。 expression式不仅包含常量expression式,例如出现在数组边界中的常量expression式或非types模板参数,还包括sizeof , decltype和其他允许非常量expression式的上下文中的常规expression式(即非常量expression式)。 C ++ 14 14.8.2 – 模板参数推导 – [temp.deduct] 7replace发生在函数types和模板参数声明中使用的所有types和expression式中。 expression式不仅包含常量expression式,例如出现在数组边界中的常量expression式或非types模板参数,还包括sizeof , decltype和其他允许非常量expression式的上下文中的常规expression式(即非常量expression式)。 replace按照词汇顺序进行,并在遇到导致扣除失败的条件时停止 。 添加的句子在处理C ++ 14中的模板参数时明确指出了replace的顺序。 替代的顺序是最经常不被重视的。 我还没有find一个关于为什么这个问题的文件。 也许这是因为C ++ 1y还没有完全标准化,但我认为这样的改变一定是出于某种原因而被引入的。 问题是: 为什么和什么时候,模板论证replace的顺序很重要?

把手 – 是否有可能在部分访问父上下文?

我有一个句柄模板,加载一个子元素的部分。 我需要从调用模板的父上下文中访问variables,从部分内部。 ..似乎没有解决任何内部的部分。 简化代码如下所示: 模板 {{#each items}} {{> item-template}} {{/each}} 部分 value is {{value}} (显然真正的代码是更复杂的,但它是相同的原则,在部分..似乎是不明确的。) 为了显示它是未定义的,我已经使用了一个非常简单的帮手,像这样: Handlebars.registerHelper('whatis', function(param) { console.log(param); }); 并更新了上面的代码: 更新的模板 {{#each items}} {{whatis ..}} <– Console shows the correct parent context {{> item-template}} {{/each}} 更新的部分 {{whatis ..}} <– Console shows "undefined" value is {{value}} 有没有办法解决这个问题? 我错过了什么吗? 编辑:有一个问题关于这个问题在handlebars的github项目