天道酬勤,学无止境

templates

Template argument deduction when the function returns a type composed from the template type and another

问题 标题很难用文字表达,但这是我试图在不可编译的代码中实现的目标: template<template <typename> class Container> Container<int> foo() { return Container<int>{1,2,3}; } int main() { auto bar = foo<std::vector>(); return 0; } 基本上我想要一个模板函数,它可以从传递给它的类型和以前已知的类型(在本例中为int )“组合”其返回类型。 在这种情况下,我想要一个在调用者指定的容器内返回任意数据类型的函数。 (任意我不是指在编译时随机或不确定,而是调用者没有关于数据类型的“输入”,这是在函数本身内部确定的)。 这种类型的事情甚至可以用clang或gcc和std+1z来实现吗? 我错过了一些非常明显的东西吗? 是否有一个跨越数百个我不知道的字符的“1 行”解决方案? 我在这里看到过各种类似的例子,但它们似乎都假设函数将指针或引用作为参数并填充这些容器。 回答1 您唯一的麻烦是std::vector不是template <typename> class 。 它是一个template <typename T, typename Alloc> class ,恰好有第二个模板参数的默认参数。 解决这个问题的一种方法是使用一个别名模板

2022-05-17 02:39:04    分类:技术分享    c++   templates   metaprogramming   template-meta-programming   c++17

Creating a template class for a pair that returns a pair [duplicate]

问题 这个问题在这里已经有了答案: 为什么模板只能在头文件中实现? (17 个回答) 5年前关闭。 代码不起作用,我不确定我哪里出错了,任何帮助将不胜感激这是分配的详细信息,通过为名为“Pair”的类编写模板来创建类模板。 此类将表示在模板定义中参数化的类型的一对数据成员。 例如,您可以有一对整数、一对双精度数等。 /* so I'm trying to implement this driver this is the driver.cpp file and * I'm trying to do it with a template class */ int main() { Pair<char> letters('a', 'd'); cout << "\nThe first letter is: " << letters.getFirst(); cout << "\nThe second letter is: " << letters.getSecond(); cout << endl; cin.get(); } //this is my .h file code template <class T> class Pair { private: T first; T second; public: Pair(const T, const T); T getFirst(); T

2022-05-16 18:23:20    分类:技术分享    c++   class   templates

How to represent Django money field with currency symbol in list template and plain decimal for edits?

问题 当我在列表模板或详细信息(只读)模板中显示货币时,我希望能够显示包含货币符号的字段值的漂亮版本:“$100.00” 但是,当正在编辑记录时,我想在没有任何货币符号的 TextInput 框中显示“100.00”。 我制作了一个自定义 models.DecimalField 类和 forms.DecimalField 类来代表我的 Django 应用程序中的钱。 所以我试图想出一种方法,让模板中的字段值的替代版本很漂亮(即正确格式化以供查看,但不适合编辑)。 我知道有模板过滤器可以让您完成此操作,但我相信这会阻止我遍历表单中的字段并显示它们的值。 如果我可以向我的自定义字段类添加一个漂亮的属性,我可以检查它是否存在于模板中并显示它。 到目前为止,我试过这个: class MoneyFormField(forms.DecimalField): def __init__(self, *args, **kwargs): # I plan to add symbol localization code here self.symbol= '$' def prepare_value(self, value): # assign pretty value to an attribute that template can access self.pretty = self.pretty

2022-05-16 03:19:25    分类:技术分享    django   templates   form-fields

What is fingerprint template format?

问题 我正计划开发一个集成指纹扫描仪的系统。 通过阅读一些 sdk,我总是遇到模板格式,例如:ANSI INCITS 378-2004 和 ISO/IEC 19794-2:2005 我很难理解它。 我知道模板是用于存储指纹的术语,但是这些格式之间有何不同,模板是否来自细节? 回答1 您提到的生物特征指纹模板格式是标准化的并且被广泛接受,比如说指纹模板细节数据的“编码”类型,独立的指纹读取器扫描仪制造商可以使用它来保存指纹数据以进行归档。 一个组织可以决定对所有保存的指纹数据使用 ANSI 381,而不管用于例如部门 X 的任何类型的指纹读取器扫描仪,并选择以 ISO 19794-2 格式保存部门 Y 的所有手指数据。 它们基于其底层编码而彼此不同,即使来自同一个人的指纹,一种格式也不会与另一种格式匹配。 至少从我作为生物识别软件解决方案开发人员的经验来看,这是我所观察到的。 您可以从此处的源 AFIS 项目 https://sourceafis.machinezoo.com/ 了解有关 ISO 19794-2 的一些信息。 2019 年 6 月更新(由上述网站的作者提供):此处描述了 ANSI 378(以及部分 ISO 19794-2)的实际格式:https://templates.machinezoo.com/。 这应该可以消除对这些文件中内容的任何疑问。

2022-05-16 02:29:15    分类:技术分享    templates   format   fingerprint

Accessing derived class' member functions in base template function

问题 我有一个名为DBDriver的类,它处理与数据库中给定表的通信。 它的公共入口点是一个名为execute_query()的函数模板,它执行 SELECT 查询。 调用此函数时,会执行一些数据库逻辑,然后将结果填充到提供的容器(模板类型)中。 这看起来像下面这样: class DBDriver { ... template <typename CONT_T> void execute_query(const std::string& query, CONT_T& container); ... }; template <typename CONT_T> void DBDriver::execute_query(const std::string& query, CONT_T& container) { DBCursor& cursor = ... // some database logic here populate_container(container, cursor); } 当然,上面不会编译,因为populate_container()没有在DBDriver中定义。 DBDriver应该是纯虚拟的,并且有几个类派生自它(每个涉及的数据库表一个类)。 每个派生类都将定义自己的populate_container()重载,每个相关容器类型都有一个。 这将如下所示:

2022-05-15 21:59:22    分类:技术分享    c++   templates   inheritance

Displaying Errors, Having Controls After to Move Downwards

问题 因此,我试图在输入无效时显示一条消息,假设我想要除ToolTip以外的其他内容,在更正错误之前一直存在。 我尝试了一个ErrorTemplate <Style TargetType="{x:Type TextBox}"> <Setter Property="Validation.ErrorTemplate"> <Setter.Value> <ControlTemplate> <StackPanel> <Border BorderBrush="Red" BorderThickness="1"> <AdornedElementPlaceholder x:Name="adornedErrorElement" /> </Border> <Label Background="Red" Foreground="White" FontSize="9" Content="{Binding ElementName=adornedErrorElement, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" /> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> <StackPanel Margin="20"> <TextBlock Text=

2022-05-15 20:32:22    分类:技术分享    wpf   validation   templates   styles

Create object from class name using a string in C++

问题 我有一个Base类: class Base() { public: Base(int, int); ~Base(); }; 我有多个继承自Base的类: class childA : public Base { public: childA(int, int, string); ~childA(); }; childA::childA(int x, int y, string str) : Base (x, y) { // do something here } 同样适用于childB , childC等 我想知道是否可以使用字符串创建childA 、 childB或childC 。 我听说过可变参数模板,但我并不真正了解如何使用它。 回答1 可变参数模板是一个模板,它可以采用任意数量的任何类型的模板参数。 自 C 语言诞生以来,这两个函数都可以是可变参数(例如 printf 函数),然后是宏,现在是模板。 你可以这样声明: template<typename... Arguments> class Variadic; 然后用任意数量的参数对其进行专门化,包括零: Variadic<double> instance; Variadic<double, std::string> instance; Variadic<> instance; 然后您可以使用参数列表,称为参数包

2022-05-15 17:30:18    分类:技术分享    c++   templates   object   inheritance

constexpr length of a string from template parameter

问题 我正在尝试使用 C++11 获取作为模板参数传递的字符串的长度。 这是我到目前为止发现的: #include <iostream> #include <cstring> extern const char HELLO[] = "Hello World!!!"; template<const char _S[]> constexpr size_t len1() { return sizeof(_S); } template<const char _S[]> constexpr size_t len2() { return std::strlen(_S); } template<const char _S[], std::size_t _Sz=sizeof(_S)> constexpr size_t len3() { return _Sz-1; } template<unsigned int _N> constexpr size_t len5(const char(&str)[_N]) { return _N-1; } int main() { enum { l1 = len1<HELLO>(), // l2 = len2<HELLO>() does not compile l3 = len3<HELLO>(), l4 = len3<HELLO, sizeof(HELLO)>()

2022-05-15 10:00:04    分类:技术分享    c++   string   c++11   templates   string-length

Type decision based on existence of nested typedef

问题 我需要定义一个模板结构,这样: element<T>::type 是类型: T::element_type 如果 T 包含一个名为 element_type 的(公共)typedef,否则(如果它不包含这样的 typedef) element<T>::type 是类型 T::value_type 如果 T 是可变的并且属于类型 const T::value_type 如果 T 是常数。 我真的很挣扎,任何建议都非常感谢! :) 非常感谢您提前提供的帮助! 回答1 也许是这样的: template <typename T> struct has_element_type { typedef char yes[1]; typedef char no[2]; template <typename C> static yes& test(typename C::element_type*); template <typename> static no& test(...); static const bool value = sizeof(test<T>(0)) == sizeof(yes); }; template <typename T> struct is_const { static const bool value = false; }; template

2022-05-15 06:35:03    分类:技术分享    c++   templates   metaprogramming

templated member function and argument forwarding

问题 我在我的 c++ 操场上玩容器,遇到了相当技术性的问题。 我正在尝试为容器实现一个 emplace 方法。 现在它应该接受一个已经构造的元素并将其传递给分配器构造方法。 我最终得到了三种方法,模板化emplaceA和一对emplaceB1 , emplaceB2 。 所有工作都按预期工作。 我的问题是emplaceA没有明确声明Arg只能是T (这就是我想要的)。 并且emplaceB1 , emplaceB2在两个不同的地方提供了几乎相同的实现(我认为这是一个缺陷)。 有解决方法吗? template<class T, class A> class container { public: using allocator_traits = typename std::allocator_traits<A>; ... template<class Arg> void emplaceA (int n, Arg&& arg){ allocator_traits::construct(allocator_, data_+n, std::forward<Arg>(arg));}; void emplaceB1(int n, const T& t){ allocator_traits::construct(allocator_, data_+n, t);}; void emplaceB2

2022-05-15 01:40:34    分类:技术分享    c++   templates   perfect-forwarding