全局函数参数
Global Function Parameter
我正在使用数组构建堆栈(不允许使用std::vector(,我必须实现一个用作构造函数的全局方法。输入参数是两个迭代器(开始和结束(,我必须从这些迭代器创建一个堆栈。问题是在我实际创建堆栈之前,我必须检查是否为空。由于我不能将堆栈作为参数传递,我应该如何调用方法呢?
这是我的代码:
template <typename IterT>
void method(IterT begin, IterT end) {
try {
if(!is_empty())
make_empty();
for(; begin!=end; ++begin) {
push(static_cast<T>(*begin));
}
}
catch(...) {
clear();
throw;
}
}
显然不起作用,方法is_empty((,make_empty((,push((和clear((需要一些东西来处理。
我的测试方法是:
int a[5] = {7, 2, 33, 4, 1111};
stack<int> sp;
sp.push(25); //check if stack is made empty
sp.print();
sp.method(a, a+5);
sp.print();
如果它必须是用作构造函数的全局方法,那么您可以做的是: 在类stack.h
内部插入此全局方法的友元声明,如下所示:
template <typename T>
class stack {
template <typename U, typename IterIt>
friend stack<U> construct(IterIt beg, IterIt end);
private:
T* inside_;
};
在堆栈中.cpp我们现在可以定义这个构造方法:
#include "stack.h"
#include <cstddef>
template <typename T, typename IterIt>
stack<T> construct(IterIt beg, IterIt end) {
// warning: works only with iterators defining binary operator-
stack<T> result;
size_t elems = end - beg;
result.inside_ = new T[elems];
T* add_to = result.inside_;
while (beg != end) {
*add_to = *beg;
++add_to;
++beg;
}
return result;
}
使用简单的主方法,您可以拥有:
int main() {
int a[] = {1,2,3,4,5};
stack<int> s = construct<int>(a, a + 5);
}
我希望这能解决你的问题。请记住,您可能需要解决一些极端情况,但作为基线,我认为这应该足够了。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类