问题标签 [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.

0 投票
4 回答
972 浏览

c++ - 派生模板覆盖成员函数 C++ 的返回类型

我正在编写矩阵类。看看这个定义:

generic_square_matrix 类提供矩阵乘法等附加功能。这样做没有问题:

由于构造函数的原因,即使类型不是 generic_square_matrix,也可以将任何方阵分配给 M。这是可能的,因为数据不会跨子级更改,只会更改受支持的函数。这也是可能的:

相同的转换适用于此。但是现在问题来了:

为了解决这个问题,我希望 generic_square_matrix::minor 返回 generic_square_matrix 而不是 generic_matrix。我认为唯一可能的方法是使用模板专业化。但是由于专业化基本上被视为一个单独的类,所以我必须重新定义所有功能。我不能像调用派生类那样调用非专业类的函数,所以我必须复制整个函数。这不是一个很好的通用编程解决方案,而且需要大量工作。

C++ 几乎可以解决我的问题:派生类的虚函数可以返回与基类返回的不同类的指针或引用,如果这个类是从基类返回的类派生的。generic_square_matrix派生自 generic_matrix,但该函数不返回指针也不返回引用,因此此处不适用。

是否有解决此问题的方法(可能涉及完全不同的结构;我唯一的要求是尺寸是模板参数并且方阵可以具有附加功能)。

提前致谢,

路德

0 投票
2 回答
624 浏览

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 是我在其中编写测试用例的测试工具类。我也使用了包含守卫,以阻止多个包含。

知道怎么回事吗??

非常感谢你!!

0 投票
1 回答
1429 浏览

c++ - 为派生类提供模板特化的最简单方法

我有以下情况:

我想专门my_traits研究所有派生自my_base包括的类,例如:

my_base添加标签和成员以使其更简单,我没有任何问题。我已经看到了一些技巧,但我仍然感到迷茫。

如何以简单而简短的方式做到这一点?

0 投票
1 回答
673 浏览

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。)

0 投票
3 回答
161 浏览

c++ - 如果我想专注于几种字符串,我是否需要多个模板专业化?

例如:

这看起来像我做错了,尤其是 const 和 non-const char* 的两个变体。但是我检查了如果我只专注于const char *然后传递一个char *变量将调用非专业版本,当在 VC++10 中这样调用时:

这样做的正确方法是什么?

0 投票
2 回答
254 浏览

c++ - 使用模板参数作为模板参数

为什么下面的代码无效?

gcc 4.3.4 抱怨它“在 '>' 标记之前期望主表达式”,即“S”不是有效的主表达式。

0 投票
2 回答
556 浏览

c++ - C++ 模板特化

我有一堂课

我想将 C 专门用于 int。

我希望保留适用于 int 的默认打印方法,只需更改常量即可。对于某些专业,我想保持 K=1 并更改打印方法,因为没有 << 运算符。

我该怎么做呢?

0 投票
4 回答
1021 浏览

c++ - 在 Visual Studio 2005 上使用 TCHAR 的 C++ 模板函数特化

我正在编写一个使用模板化 operator<< 函数的日志记录类。我将模板函数专门用于宽字符串,以便在编写日志消息之前进行一些从宽到窄的翻译。我无法让 TCHAR 正常工作 - 它不使用专业化。想法?

这是相关的代码:

和源文件

现在,我使用下面的测试程序来练习这些功能

运行上述测试显示以下内容:

不幸的是,这并不完全正确。我真的很希望最后一个是“TCHAR”,这样我就可以转换它。根据 Visual Studio 的调试器,当我进入测试 5 中调用的函数时,类型是 wchar_t*& - 但它没有调用适当的专业化。想法?

我不确定它是否相关,但这是在 Windows CE 5.0 设备上。

0 投票
2 回答
757 浏览

c++ - 专门化模板类的模板成员函数?

我有一个模板类,它有一个需要专门化的模板成员函数,如:

Altough VC 正确地处理了这个问题,显然这不是标准的,GCC 抱怨:explicit specialization in non-namespace scope 'class X<T>'

我试过:

但这会导致 VC 和 GCC 都抱怨。

这样做的正确方法是什么?

0 投票
2 回答
1601 浏览

c++ - 模板专业化上的 C++ 编译器错误

我想为一个本身由一个 int 参数模板化的类 C 专门化一个模板方法。

我该怎么做呢?

test() 的特化失败,出现“void test() 声明中的模板参数列表过多”。