我们可以用自定义函数扩展现有的类吗?(无继承)
Can we extend existing classes with custom functions? (No inheritance)
我正在寻找一种用自定义成员方法扩展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>
中,而不将其子类化?
很抱歉,如果这是重复的,如果不使用继承,我找不到任何可以回答我问题的内容。
如果您的意图只是扩展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的一个成员,但将其建模为一个使用迭代器的独立函数是非常强大的,因为相同的函数可以用于set-deques等。
如果你有N容器和M算法作为成员函数,你会有N*M
相关文章:
- 将自定义函数传递到基抽象类中以延迟执行
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 每个类实例的自定义函数 (C++)
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 具有自定义函数的 C++ 矢量构造函数
- 自定义函数转换错误?
- 模板中的自定义函数C++
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- r-工作程序中对自定义函数的未定义引用(C++和RcppParallel)
- 传递自定义函数类型时的'incompatible types in assignment'
- 从状态内的自定义函数(不是操作)提升 MSM 调用process_event?
- 如何使用C 代码调用MATLAB自定义函数
- glibc函数的GCC、-flto、-fno内置和自定义函数实现
- 自定义函数中断
- 继承自定义选项卡栏和调整大小事件的实现
- 在1语句中传递一个自定义函数作为模板参数
- 特征中的系数自定义函数
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- 我们可以用自定义函数扩展现有的类吗?(无继承)