作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道标题很烂,只是我不太确定该怎么问,因为我缺乏许多基本的C++功能知识,因此我试图一一解决。
因此,我开始研究C++模板。现在,我正在构建真正的基础代码,只是为了帮助我调试代码,例如:
void printVectors(const T& vec, const S& vec2) {
for (int i = 0; i < vec.size(); i++) {
print("------------");
printNoEndln(vec[i]);
printNoEndln("->");
print(vec2[i]);
}
}
template <typename T, typename... TArgs>
T& AddComponent(TArgs&&... args) {
T* newComponent(new T(std::forward<TArgs>(args)...));
newComponent->componentName = typeid(T).name();
newComponent->owner = this;
components.emplace_back(newComponent);
newComponent->Init();
return *newComponent;
}
AddComponent
,该函数返回T的引用并接收TArgs(???)类型的引用的N个引用(这部分确实让我感到困惑)。
newComponent
的实例化是通过
()
(例如
newComponent()
)而不是
T* newComponent = new Component(...)
来解决的(严重的是,我可以从这一行中掌握所有内容)
最佳答案
template <typename T, typename... TArgs>
T& AddComponent(TArgs&&... args)
AddComponent
的声明。
T
和
TArgs
是模板参数,两者都必须是类型。
TArgs
是一个可变参数(可以容纳0个或更多类型)。例如,
function template会为
T
和
TArgs
的每个唯一组合淘汰函数。
AddComponent<int,long,float>
可能是这样的功能。
TArgs&&...
之所以称为
forwarding references,是因为模板声明中的
&&
具有保留参数的值类别(左值/右值)的作用。
T* newComponent(new T(std::forward<TArgs>(args)...));
newComponent
和初始值为
T
的局部变量
new T(std::forward<TArgs>(args)...)
的定义。
std::forward
是一个辅助程序实用程序,可与
TArgs&&
一起使用,并在需要时将右值引用传递给调用。浏览代码时,可以忽略它,并将
new T(std::forward<TArgs>(args)...)
读为
new T(args...)
。现在这是一个可变的
pack expansion语法;这里,模板中的参数
args
只是传递给
new()
。
关于c++ - 有人可以帮我启发这个模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234704/
我正在尝试构建一个 float 在 ViewController 顶部的按钮,它应该静态地保持在相同的位置,而它下面的 viewcontroller 可以上下滚动。 我设计了自己的按钮类,在父 Vie
目前Boost有hash_combine函数输出32位无符号整数(准确的说是size_t)。一些引用: http://www.boost.org/doc/libs/1_43_0/doc/html/ha
我试过看看如果我们尝试以与 Java 中类似的方式“破坏”一个对象数组,在 C++ 中会发生什么。 在 Java 中我们可以有一个 Double[] 类型的数组,例如,将其向上转换为 Number[]
很抱歉问了这么长的问题,但我需要做一个介绍以使其更清楚。 我需要一些代码来在我的 Headers 组件之间切换 和 . 起初我使用 CSS 媒体查询通过 display: block | none;
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
我是一名优秀的程序员,十分优秀!