我正在寻找一种使用自定义成员方法扩展C ++类的方法。就像C#使用Linq扩展一样:
public static class Factory
{
public static int getIndex(this List<int> source, int value)
{
int index = 0;
foreach (int item in source)
{
if (item == value)
return index;
index++;
}
return -1;
}
}
此C#代码将为列表的每个实例添加一个方法。所以你可以写:
List<int> myList = new List<int>();
myList.Add(26);
myList.Add(42);
myList.Add(37);
myList.Add(3);
int index = myList.getIndex(42);
这在C ++中是否可行?如何正确地将此类方法添加到std::vector<T>
而不进行子类化呢?
很抱歉,如果这是重复的,我找不到任何回答我的问题而不使用继承。
答案 0 :(得分:1)
如果您的目的仅仅是扩展std c ++容器类,那么您应该考虑算法而不是成员方法。
考虑这段代码。 没有错误检查以简洁
#include <vector>
#include <set>
#include <iostream>
// returns the second element
template< typename T>
int getSecond(T begin)
{
begin++;
return *begin;
}
int main()
{
std::vector<int> intlist;
intlist.push_back(1);
intlist.push_back(2);
intlist.push_back(3);
std::set<int> intset;
intset.insert(1);
intset.insert(3);
intset.insert(2);
std::cout << "Second in vector " << getSecond(intlist.begin()) << std::endl;
std::cout << "Second in set " << getSecond(intset.begin()) << std::endl;
}
现在可以假设将getSecond建模为std :: vector的一个成员,但是将其建模为一个独立函数,它采用迭代器非常强大,因为相同的函数可以用于设置deques等。
如果您有 N 容器和 M 算法作为成员函数,您将拥有 N * M 函数,但作为独立的算法函数,代码要少得多