问题标签 [template-function]
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++ - 具有特殊功能的拉开功能类型
这个问题的答案使用类模板挑选出一个函数类型:
当我研究这里正在做的事情时,我试图重写function_args
. 我试图使用一个函数来做到这一点,以消除对decltypeargs
模板的需求。但发现自己陷入了不正确的语法:
我的希望是打电话decltype(myTry<decltype(foo)>())
来获取tuple
类型,而不是打电话decltypeargs<decltype(foo)>
。有没有办法通过函数声明来做到这一点?
c++ - 可变参数模板函数不会链接
cmds.cpp 有这个:
cmds.h 有这个:
main.cpp 有这个:
编译器愉快地编译。然而,链接器说:
生成文件标志:
到底是怎么回事?
c++ - 当作为类的成员函数重载时,解引用运算符 (*) 如何工作?
当我查阅有关运算符重载的书籍和堆栈溢出文章时,我发现以下内容:
当重载运算符是成员函数时, this 绑定到左侧操作数。成员运算符函数的参数比操作数的数量少一个(显式)。
(Addison Wesley,C++ 入门)
所以我的问题是,由于*
(dereference) 运算符没有任何左操作数,它如何获取其参数(即对象本身或this
)?
c++ - 从 C 文件调用模板函数
我知道模板不是用 C 定义的。但是在我的例子中,我有一个用 C++ 编写的 API,它由用 C 编写的应用程序使用。我希望在 API 中添加一个模板函数。该函数在 abc.cpp 中定义如下:
abc.hpp 中的声明如下:
这个函数是从 xyz.c 调用的:
但是,它在 abc.cpp 和 abc.hpp 中都显示以下错误:
即使使用 extern "C" 也无济于事(导致错误:带有 C 链接的模板)。我的疑问是,是否可以以这种方式调用此模板函数?如果是,如何实现?谢谢你。
c++ - 模板类类型特定函数
好的,所以我有这个模板类,它有点像单向列表。
它有这个内部功能打印
你可以猜到,它从头到尾打印列表内容;但是,由于模板可以将类作为 T,可以想象,对于这种情况,我需要不同的 Print() 实现。例如,我有另一个类 Point
所以我想要专门为点设计的打印。我试过这个:
但编译器告诉我
尽管
对我来说,这似乎是相同的功能。怎么了?以及如何编写特定于 T 的模板类函数?
c++ - 如何在 C++ 中定义需要两个迭代器的模板函数?
我想定义一个模板函数,它需要两个迭代器,一个是 begin(),另一个是 end()。这如何在 C++ 中实现?
到目前为止,我能想到以下几点:
这是错的吗?
friend-function - 如何定义模板类的友元模板函数
我有一个模板类array_T
,它是一个通用数组和一个模板函数linear search TEMPLATE.h
,它被声明为类的朋友,arrayTemplate.h
因此它可以使用类的成员函数getArraySize()
和类的数据成员a
,它是一个动态分配数组
数组模板.h
线性搜索 TEMPLATE.h
主文件
这些是我得到的错误
线性搜索 template.h(8):错误 C2065:'array_T':未声明的标识符
线性搜索 template.h(8):错误 C2065:“对象”:未声明的标识符
线性搜索 template.h(8): 错误 C2275: 'T': 非法使用这种类型作为表达式
线性搜索 template.h(6):注意:参见“T”的声明
线性搜索 template.h(8):错误 C2146:语法错误:标识符“desiredData”之前缺少“)”
main.cpp(14): 错误 C2660: 'linearSearch': 函数不接受 2 个参数
========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========
c++ - 非法使用模板中的类型
我是模板新手。我不知道我做错了什么:
在 VS2013 中编译后出现错误:错误 1 错误 C2275:'T':非法使用这种类型作为表达式
c++ - C++1z 标准如何定义模板函数声明中属性的正确位置?
我注意到 C++11 和 C++14 标准中的第 18.8/1 节在<exception>
标题概要中包含以下声明:
而在最新的 C++17 草案中,相同的声明显示为
这是否意味着属性的语法在 C++17 中发生了变化,或者只是前一行是一个已得到纠正的错误?在 7.6 和 14.5.6 中,我都找不到任何关于属性应该出现在哪里的明确描述。有人可以指出这是在哪里定义的吗?
实际上,MSVC 对第一个和第二个声明都很满意,而 g++ 和 clang 拒绝编译第一个版本(后者带有相当明确的error: an attribute list cannot appear here
),所以无论如何都需要使用第二个版本。但我想知道第一个是否也应该有效。
c++ - 执行模板参数包指向的所有方法
- 我可以制作方法(=成员函数)指针的模板参数包吗?
- 如果是,是否可以创建一个(模板)函数来执行其模板参数包中的所有方法?
简化:
- 指定方法的执行顺序无关紧要。
- 所有方法指针具有相同的签名(例如 return
bool
,具有相同的基类,不带参数)