问题标签 [template-specialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 派生模板覆盖成员函数 C++ 的返回类型
我正在编写矩阵类。看看这个定义:
generic_square_matrix 类提供矩阵乘法等附加功能。这样做没有问题:
由于构造函数的原因,即使类型不是 generic_square_matrix,也可以将任何方阵分配给 M。这是可能的,因为数据不会跨子级更改,只会更改受支持的函数。这也是可能的:
相同的转换适用于此。但是现在问题来了:
为了解决这个问题,我希望 generic_square_matrix::minor 返回 generic_square_matrix 而不是 generic_matrix。我认为唯一可能的方法是使用模板专业化。但是由于专业化基本上被视为一个单独的类,所以我必须重新定义所有功能。我不能像调用派生类那样调用非专业类的函数,所以我必须复制整个函数。这不是一个很好的通用编程解决方案,而且需要大量工作。
C++ 几乎可以解决我的问题:派生类的虚函数可以返回与基类返回的不同类的指针或引用,如果这个类是从基类返回的类派生的。generic_square_matrix派生自 generic_matrix,但该函数不返回指针也不返回引用,因此此处不适用。
是否有解决此问题的方法(可能涉及完全不同的结构;我唯一的要求是尺寸是模板参数并且方阵可以具有附加功能)。
提前致谢,
路德
visual-c++ - 用户定义的类类型模板参数的链接错误
我用 C++ 实现了一个简单的 STL 映射。按照我的指示将比较分解为一种类型,然后实现如下所示的比较:
在这里,tKey1 和 tKet2 是我要比较的两个键。这适用于所有基本数据类型和字符串。我添加了一个模板特化来比较名为Test的用户定义类型的键,并添加了一个特化如下:
当我运行它时,我收到一个链接错误说
SimpleMap.obj : 错误 LNK2005: "public: int __thiscall KeyCompare::operator()(class Test,class Test)" (??R?$KeyCompare@VTest@@@@QAEHVTest@@0@Z) 已经在 MapTest 中定义.obj
SimpleMap.obj : 错误 LNK2005: "public: __thiscall KeyCompare::~KeyCompare(void)" (??1?$KeyCompare@VTest@@@@QAE@XZ) 已在 MapTest.obj 中定义
SimpleMap.obj : error LNK2005: "public: __thiscall KeyCompare::KeyCompare(void)" (??0?$KeyCompare@VTester@@@@QAE@XZ) 已在 MapTest.obj 中定义
MapTest.cpp 是我在其中编写测试用例的测试工具类。我也使用了包含守卫,以阻止多个包含。
知道怎么回事吗??
非常感谢你!!
c++ - 为派生类提供模板特化的最简单方法
我有以下情况:
我想专门my_traits
研究所有派生自my_base
包括的类,例如:
my_base
添加标签和成员以使其更简单,我没有任何问题。我已经看到了一些技巧,但我仍然感到迷茫。
如何以简单而简短的方式做到这一点?
c++ - 为模板特化提供 *implicit* 转换运算符
我有一个模板sparse_vector<T>
类,我也在使用 Boost UBLAS。我将如何提供和之间的隐式转换?sparse_vector<double>
boost::numeric::ublas::compressed_vector<double>
我还想在std::vector<double>
和之间提供类似的转换boost::numeric::ublas::vector<double>
。
(我使用启用了 C++0x 的 gcc 4.4。)
c++ - 如果我想专注于几种字符串,我是否需要多个模板专业化?
例如:
这看起来像我做错了,尤其是 const 和 non-const char* 的两个变体。但是我检查了如果我只专注于const char *
然后传递一个char *
变量将调用非专业版本,当在 VC++10 中这样调用时:
这样做的正确方法是什么?
c++ - 使用模板参数作为模板参数
为什么下面的代码无效?
gcc 4.3.4 抱怨它“在 '>' 标记之前期望主表达式”,即“S”不是有效的主表达式。
c++ - C++ 模板特化
我有一堂课
我想将 C 专门用于 int。
我希望保留适用于 int 的默认打印方法,只需更改常量即可。对于某些专业,我想保持 K=1 并更改打印方法,因为没有 << 运算符。
我该怎么做呢?
c++ - 在 Visual Studio 2005 上使用 TCHAR 的 C++ 模板函数特化
我正在编写一个使用模板化 operator<< 函数的日志记录类。我将模板函数专门用于宽字符串,以便在编写日志消息之前进行一些从宽到窄的翻译。我无法让 TCHAR 正常工作 - 它不使用专业化。想法?
这是相关的代码:
和源文件
现在,我使用下面的测试程序来练习这些功能
运行上述测试显示以下内容:
不幸的是,这并不完全正确。我真的很希望最后一个是“TCHAR”,这样我就可以转换它。根据 Visual Studio 的调试器,当我进入测试 5 中调用的函数时,类型是 wchar_t*& - 但它没有调用适当的专业化。想法?
我不确定它是否相关,但这是在 Windows CE 5.0 设备上。
c++ - 专门化模板类的模板成员函数?
我有一个模板类,它有一个需要专门化的模板成员函数,如:
Altough VC 正确地处理了这个问题,显然这不是标准的,GCC 抱怨:explicit specialization in non-namespace scope 'class X<T>'
我试过:
但这会导致 VC 和 GCC 都抱怨。
这样做的正确方法是什么?
c++ - 模板专业化上的 C++ 编译器错误
我想为一个本身由一个 int 参数模板化的类 C 专门化一个模板方法。
我该怎么做呢?
test() 的特化失败,出现“void test() 声明中的模板参数列表过多”。