我有:
void add_all_msgs(std::deque<Message>::iterator &iter);
Run Code Online (Sandbox Code Playgroud)
如何使该功能"通用",所以它可以采取任何类型的输入器?只要迭代器迭代Message,我就不在乎它是否正在迭代一个deque,一个向量或其他东西. - 这在C++中是否可以直接进行?
Edo*_* A. 13
template <typename Iterator>
void add_all_messages(Iterator first, Iterator last)
Run Code Online (Sandbox Code Playgroud)
用法:
vector<message> v;
add_all_messages(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
你需要指定结束,否则你不知道何时停止!它还为您提供了仅添加容器子范围的灵活性.
template<class InputIterator>
void add_all_msgs(InputIterator iter);
Run Code Online (Sandbox Code Playgroud)
用法:
std::deque<Message> deq;
add_all_msgs(deq.begin());
Run Code Online (Sandbox Code Playgroud)
如果希望编译器检查迭代器是否实际引用了Message对象,则可以使用如下所示的技术.
template <typename InputIterator, typename ValueType>
struct AddAllMessages { };
template <typename InputIterator>
struct AddAllMessages<InputIterator, Message> {
static void execute(const InputIterator &it) {
// ...
}
};
template <typename InputIterator>
void add_all_msgs(const InputIterator &it) {
AddAllMessages<InputIterator,
typename std::iterator_traits<InputIterator>::value_type>::execute(it);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |