templates 相关问题

模板标签用于多种上下文:通用编程(尤其是C ++),以及使用模板引擎生成数据/文档。在实现繁重的问题上使用此标记时 - 标记实现编写的代码语言。

我正在尝试编写模板化代码来比较两个向量,但我收到这些错误

#包括 #包括 #定义块大小5 模板 类向量{ T*ptr; 整数大小; 整数容量; 民众: vec():大小(0),容量(

回答 1 投票 0

如果来自片段,如何向 thymeleaf head 标签添加附加内容?

在 django 中我可以这样做: {% 块内容 %} (....) ---------> 部分模板中的内容位于此处。 {% 末端嵌段 %} (....) ---------> 我可以给她添加额外的东西...

回答 2 投票 0

如何通过索引设置std::tuple元素?

可以使用 std::get 通过索引从 std::tuple 获取元素。 类似地,如何通过索引设置元组的元素?

回答 3 投票 0

如何将 Office365 模板(格式为 .dotm)导出为 XML

我有一个包含合并字段、文本等的 Word 365 模板(扩展名为 .dotm)。但我想将此模板导出到 XML 文件(或其他扩展名)中。可能吗?

回答 1 投票 0

django-tailwindcss 集成图像未显示

我已经有一个带有模板文件index.html的Django项目,但我的图像没有显示我尝试了包括 {% load static %} 在内的所有内容,但它仍然无法工作,可能是因为我使用了 {% load

回答 1 投票 0

按模板类型对齐成员变量

我想根据类模板类型对齐我的成员变量,但我不确定这是否真的可行。 以下是我想做的一个(非常)简单的例子 模板 我想根据类模板类型对齐我的成员变量,但我不确定这是否真的可行。 以下是我想做的一个(非常)简单的示例 template<int Align> class MyClass { private: struct MyStruct { // Some stuff } __declspec(align(Align)); __declspec(align(Align)) int myAlignedVariable; }; 所以我希望 Align 成为每个实例的变量,只有这样才能决定类内容的对齐值。 不幸的是我总是收到以下错误 error C2975: 'test::MyClass' : invalid template argument for 'Align', expected compile-time constant expression 那么,这实际上可能吗,还是只能使用固定的编译时间常数才能实现对齐?如果没有的话,有人能想办法解决这个问题吗? 谢谢:) 自定义对齐不在标准中,因此编译器如何处理它取决于它们 - 看起来 VC++ 不喜欢将模板与 __declspec 结合起来。 我建议使用专业化的解决方法,如下所示: template<int A> struct aligned; template<> struct aligned<1> { } __declspec(align(1)); template<> struct aligned<2> { } __declspec(align(2)); template<> struct aligned<4> { } __declspec(align(4)); template<> struct aligned<8> { } __declspec(align(8)); template<> struct aligned<16> { } __declspec(align(16)); template<> struct aligned<32> { } __declspec(align(32)); 然后从你的代码中派生出来: template<int Align> class MyClass { private: struct MyStruct : aligned<Align> { // stuff }; }; 不幸的是,这破坏了 MyStruct 的 POD 特性。它也不适用于内置/现有类型,因此您必须使用它们的包装器。 aligned_t<int, 4> myAlignedVariable; Boost已经解决了这个问题。他们使用了boost::Optional(链接到标题)中的技术,该技术必须为对齐的任意类型保留足够的空间,但不能(不会)在构造时实际实例化该对象。 他们的解决方案是分配一个简单的字节池(字符数组)并使用就地 new 在所需位置构造对象。赋予 in-place new 的地址可以是任意对齐的。 话虽这么说,你是说你在问题中给出了一个非常简单的例子。您试图通过实现一个类来解决的实际问题是什么,其中每个成员都有用户指定的对齐方式,该对齐方式不会因成员而异,但可以因类实例而异? 从C++14开始,C++支持此功能。 template <typename T> struct __declspec(align(16)) type_a { T* c; }; template <typename T> struct type_b { T* c; }; int main() { static_assert(sizeof(type_a<int>) == 16); static_assert(sizeof(type_b<int>) == 8); }

回答 3 投票 0

如何显示模板django中数据库中下拉列表中所有项目中所选项目的值

请帮助根据列表(项目)中所选的值自动填写字段(公司/修订),例如,如果在下拉列表中选择“PROJECT2”...

回答 1 投票 0

专门针对树算法的 C++ 递归模板

我正在使用递归 C++ 模板开发一种树状算法。我设法用下面的简化算法重现我的问题。该算法采用单个整数作为输入。它计算...

回答 1 投票 0

接口和实现位于单独文件中的类模板

我有一些模板类,它们分为头文件和实现文件: // 我的模板.h 模板 类我的模板{ 民众: 无效 Foo(); }; // 我的模板.cpp #

回答 2 投票 0

具有*至少*某些参数的模板和虚函数

我知道虚函数不能模板化,但是有没有一种方法可以让派生类实现泛型函数,并且虚函数需要这样的泛型函数至少具有

回答 1 投票 0

在 HTMX 中使用 bcosca/fat-free 框架:有没有办法渲染模板片段?

我知道使用 INCLUDE 将模板分解为可以多种方式重用的片段,但这会导致许多单独的文件变得难以一致命名和管理。我...

回答 1 投票 0

从结构中提取模板类型

我有简单的标签结构 模板 结构体标签{}; 和一个班级 模板 类实现{ 民众: T func(参数...); }; 是否可以...

回答 2 投票 0

C++ 函数模板调用自身并陷入递归

代码如下: #包括 模板 结构体CTest { }; 模板 结构 CTest<__T, __Ts...>:公共 CTest<__Ts.....

回答 2 投票 0

非模板类 C++ 中的构造函数模板

我有一个非模板类(Uart),想要创建模板构造函数。它需要采用另一个模板类对象(SafeQueue)。然后这个构造函数会调用另一个模板函数def...

回答 1 投票 0

如何从模板类型别名中删除尖括号

示例: #包括 模板 结构体 X { 模板=真> 使用 MaybeInt = int; 模板 示例: #include <type_traits> template<bool condition> struct X { template<std::enable_if_t<condition, bool> = true> using MaybeInt = int; template<std::enable_if_t<condition, bool> = true> static MaybeInt<> MaybeResult() { return 0; } }; int main() { return X<true>::MaybeResult(); } 是否可以使用末尾没有空尖括号的X<true>::MaybeInt类型?如果没有,为什么? 如果我只是在第 9 行删除它们,C++17 中的 clang++ 会给出以下错误: main.cpp:9:12: error: use of alias template 'MaybeInt' requires template arguments; argument deduction not allowed in function return type static MaybeInt MaybeResult() { ^~~~~~~~ main.cpp:6:5: note: template is declared here using MaybeInt = int; ^ 1 error generated. 为什么不允许这样做? 不,在类或别名模板名称上省略模板参数列表与空模板参数列表具有不同的含义。 使用空的模板参数列表,整个事物命名一个单一类型,该类型是通过使用模板参数的所有默认模板参数获得的特化。 如果没有模板参数列表,该名称向编译器指示要执行类模板参数推导 (CTAD) 来确定模板参数。 然而,正如编译器告诉您的那样,CTAD 仅在特定上下文中允许,并且函数返回类型不是其中之一。

回答 1 投票 0

C++17 之前的 CTAD 替代品?

(或者:“如何存储不允许使用 auto 的模板参数推导函数的返回值”) 我正在开发一个由多个类模板组成的通用 C++ 框架 那个阿洛...

回答 1 投票 0

为模板化成员函数设置别名

我在类中有以下成员函数 类 cls { ... 模板 布尔函数(...){ // 根据 做一些事情 } ... } 我想改变功能...

回答 1 投票 0

重写函数模板特化中的返回类型

我想专门化一个函数模板,以便返回类型根据模板参数的类型而变化。 返回类型专业化类 { 民众: 模板 我想专门化一个函数模板,以便返回类型根据模板参数的类型而变化。 class ReturnTypeSpecialization { public: template<typename T> T Item(); }; // Normally just return the template type template<typename T> T ReturnTypeSpecialization::Item() { ... } // When a float is specified, return an int // This doesn't work: template<float> int ReturnTypeSpecialization::Item() { ... } 这可能吗?我无法使用 C++11。 由于特化必须与返回类型上的基本模板一致,因此您可以通过添加“返回类型特征”来实现这一点,这是一个可以特化并从中绘制真实返回类型的结构: // in the normal case, just the identity template<class T> struct item_return{ typedef T type; }; template<class T> typename item_return<T>::type item(); template<> struct item_return<float>{ typedef int type; }; template<> int item<float>(); 实例。 请注意,您可能想坚持以下内容,因此您只需更新 item_return 专业化中的返回类型。 template<> item_return<float>::type foo<float>(){ ... } // note: No `typename` needed, because `float` is not a dependent type 您可以像这样进行模板专业化: template<typename T> T item() { return T(); } template<> float item<float>() { return 1.0f; } 在工作类中完成所有专业化,并使用一个简单的函数作为将隐式专业化的包装器。 #include <iostream> using std::cout; // worker class -- return a reference to the given value template< typename V > struct worker { typedef V const & type; static type get( V const & v ) { return v; } }; // worker class specialization -- convert 'unsigned char' to 'int' template<> struct worker<unsigned char> { typedef int type; static type get( unsigned char const & v ) { return v; } }; // mapper function template< typename V > typename worker<V>::type mapper( V const & v ) { return worker<V>::get(v); } int main() { char a='A'; unsigned char b='B'; cout << "a=" << mapper(a) << ", b=" << mapper(b) << "\n"; } 在此示例中,unsigned char的特化导致它被转换为int,以便cout将其显示为数字而不是字符,生成以下输出... a=A, b=66 也许你可以使用以下技巧。鉴于这些简单的类型特征: template<bool b, typename T, typename U> struct conditional { typedef T type; }; template<typename T, typename U> struct conditional<false, T, U> { typedef U type; }; template<typename T, typename U> struct is_same { static const bool value = false; }; template<typename T> struct is_same<T, T> { static const bool value = true; }; 您可以编写您的类和专门的成员函数,如下所示: class ReturnTypeSpecialization { public: template<typename T> typename conditional<is_same<T, float>::value, int, T>::type Item(); }; // Normally just return the template type template<typename T> typename conditional<is_same<T, float>::value, int, T>::type ReturnTypeSpecialization::Item() { return T(); } // When a float is specified, return an int template<> int ReturnTypeSpecialization::Item<float>() { return 1.0f; } 简单测试程序(使用C++11只是为了验证): int main() { ReturnTypeSpecialization obj; static_assert(std::is_same<decltype(obj.Item<bool>()), bool>::value, "!"); static_assert(std::is_same<decltype(obj.Item<float>()), int>::value, "!"); } 这是一个实例。 您好,我尝试使用模板专门化来返回基元以及 std::string 数据的参数值,但这样做时我遇到了很多未解决的外部重新定义类型的错误。 因此,如果有人遇到这样的情况,当他/她想要返回不同的数据类型(包括字符串)时,他/她可以使用如下所示的内容, 注意:模板函数必须是头文件(*.h)的一部分... 所以我们在这里使用模板专业化字符串数据类型...... 在类内部作为内联成员,我们必须使用模板专用方法,并且在同一个文件中我们也可以定义模板。 class ConfigFileParser { public: bool ParseConfigFile(const std::string& file_name); template <typename T> T GetParameterValue(const std::string key); template <> std::string GetParameterValue<std::string>(const std::string key) { std::string param_val = ""; //do logical operation here... return param_val; } private: // private functions... // private data... }; template <typename T> T ConfigFileParser::GetParameterValue(const std::string key) { T param_val = 0; std::stringstream ss; std::string val_str; // do some operation here... ss << val_str.c_str(); ss >> param_val; return param_val; } 在 C++23 的帮助下,您可以用更少的代码来完成: #include <type_traits> template<typename T> std::type_identity_t<T> bar(); template<> std::type_identity_t<float> bar<float>() {return {}; } template<> std::type_identity_t<int> bar<int>() {return {}; }

回答 6 投票 0

C++ 模板的问题:完整指南第二版

#包括 // 任何类型的两个值的最大值(按引用调用) 模板 T const& max (T const& a, T const& b) { 返回 b < a ? a : b; } // ma...

回答 1 投票 0

具有多个参数和默认参数的类模板

我有一个这样的类模板: 结构体中继 { 整数引脚; 布尔状态; }; 模板 类 RelayArray { 私人的: 继电器阵列[N]; // 或 std::array 我有一个这样的类模板: struct Relay { int pin; bool state; }; template<std::size_t N, uint8_t D = 10> class RelayArray { private: Relay array[N]; //or std::array<Relay, N> public: RelayArray(const Relay(&ref)[N]) {} }; RelayArray myRelayArray{{{2, true}, {4, false}, {6, true}}}; 上面的声明“扩展”为RelayArray<3, 10> myRelayArray... 现在,我想提供“D”,并且仅提供“D”。应再次从声明中推导出“N”。 以下作品: RelayArray<3, 5> myRelayArray{{{2, true}, {4, false}, {6, true}}}; 但不是这使用 5 作为第一个参数,而不是 D: RelayArray<5> myRelayArray{{{2, true}, {4, false}, {6, true}}}; // does not work 在 C++17 或更早版本中,有什么方法可以让 RelayArray<5> 选择 D=5 并让 N 从初始化器中推导出来? 例如,我找到了一些带有别名的解决方案,但我对此并不满意。 谢谢 弗雷德 因为默认模板参数必须是参数列表中的最后一个,所以实际上无能为力。别名或嵌套模板。别名模板 template <std::size_t N> using RelayArray5 = RelayArray<N, 5>; 可用作嵌套类型: template <std::uint8_t D = 10> struct Def { template <std::size_t N> using Array = RelayArray<N, D>; }; Def<5>::Array myRelayArray{{{2, true}, {4, false}, {6, true}}};

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.