Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;,对每个数组成员执行函数 我有一个关于C++和数组的问题。_C++_Arrays_Delegates_Function Pointers - Fatal编程技术网

c++;,对每个数组成员执行函数 我有一个关于C++和数组的问题。

c++;,对每个数组成员执行函数 我有一个关于C++和数组的问题。,c++,arrays,delegates,function-pointers,C++,Arrays,Delegates,Function Pointers,假设我有一个名为CustomArray的类,它只不过是一个通用数组,具有大小和容量属性,可以使数组动态。定义为: template<typename T> class CustomArray { public: int capacity, size; T* items; //constructor //destructor //function1 //function2 //etc... }; 模板 类自定义数组 {

假设我有一个名为CustomArray的类,它只不过是一个通用数组,具有大小和容量属性,可以使数组动态。定义为:

template<typename T>
class CustomArray
{
public:
    int capacity, size;
    T* items;
    //constructor

    //destructor

    //function1

    //function2

    //etc...
};
模板
类自定义数组
{
公众:
int容量、大小;
T*项目;
//建造师
//析构函数
//功能1
//功能2
//等等。。。
};
现在我有点困了,我想实现一个函数,比如:

void性能元素(/*函数?*/)
{
对于(int i=0;i
它将另一个函数作为参数(如果可能的话?),并在所有元素上执行它。这可能吗?如果可能的话…如何


提前感谢。

添加成员
开始
结束
如下:

T *begin() { return items; }

T *end() { return items + size; }
创建一个派生自
std::一元函数的函子

例如


如果
(1)
不是空的,则lambda是一个闭包;这称为捕获lambda,并提供了一个很好的例子。

添加成员
开始
结束
,如下所示:

T *begin() { return items; }

T *end() { return items + size; }
template<class functionptr>
void performOnAllItems(functionptr ptr)
{
    for(int i = 0; i < size; i++)
        ptr(items[i]);
}
创建一个派生自
std::一元函数的函子

例如

如果
(1)
不是空的,则lambda是一个闭包;这称为捕获lambda,并提供了一个很好的示例。

模板
template<class functionptr>
void performOnAllItems(functionptr ptr)
{
    for(int i = 0; i < size; i++)
        ptr(items[i]);
}
无效性能项(功能ptr ptr) { 对于(int i=0;i

typedef void(*functionptr)(T&);
无效性能项(功能ptr ptr)
{
对于(int i=0;i
第二种方法大大限制了可以使用的函数,但第一种方法没有。

template
无效性能项(功能ptr ptr)
{
对于(int i=0;i

typedef void(*functionptr)(T&);
无效性能项(功能ptr ptr)
{
对于(int i=0;i

第二个大大限制了可以使用哪些函数,但是第一个没有。

当然。您只需修改
性能项
来获取函数指针,它返回
void
,并将
T
T
指针作为参数(根据我下面的解决方案)为列表中的每个项调用该函数指针

template <typename T>
void CustomArray::performOnAllItems(void (*action)(T*))
{
    for(int i = 0; i < size; i++)
    {
        action(items + i);
    }
}
模板
void CustomArray::性能元素(void(*action)(T*))
{
对于(int i=0;i
当然可以。您只需修改
performOnAllItems
以获取函数指针,该指针返回
void
,并将
T
T
指针作为参数(根据我下面的解决方案),为列表中的每个项目调用该函数指针

template <typename T>
void CustomArray::performOnAllItems(void (*action)(T*))
{
    for(int i = 0; i < size; i++)
    {
        action(items + i);
    }
}
模板
void CustomArray::性能元素(void(*action)(T*))
{
对于(int i=0;i你真的想要“C”在标签中吗?C++和C的答案会有很大不同。C没有模板。OP显然要求C++回答。“在标签上?C++和C的答案将会非常不同。C没有模板。OP显然要求C++的答案。更喜欢使用<代码> STD::vector < /COD>,因为它已经支持了<代码>开始)、结束()/<代码>和迭代器。我将补充,作为写入,MOOIN的第一个函数也应该与函子一起工作(参见),我将补充,作为写入,MOOIN的第一个函数也应该与函子一起工作(参见)我想他的问题是应该修改函数的参数类型以添加std::一元函数示例我想他的问题是应该修改函数的参数类型以添加std::一元函数示例啊,你在我的代码中发现了一个不同的错误。让我帮你编辑一下。啊,你在我的代码中发现了一个不同的错误。让我帮你编辑一下。
template <typename T>
void CustomArray::performOnAllItems(void (*action)(T*))
{
    for(int i = 0; i < size; i++)
    {
        action(items + i);
    }
}