带有函数指针的初始化列表-这里有技巧吗?

问题描述 投票:2回答:3

我一直在读一本有关基本数据结构的教科书,只是为了进行回顾-自从我编写了自己的哈希表或红色/黑色树以来已经有一段时间了:]

无论如何,我碰到了一些让我有些不适的东西。作者非常想对每个成员使用初始化列表(就像人们希望的那样),但是在这种情况下,他将函数指针传递给哈希函数,因此他选择在构造函数中使用赋值运算符,而不是设置向上指针在初始化器列表中(并且他也在此代码中使用初始化器列表):

template<class DataType>
HashTable<DataType>::HashTable(int (*hf)(const DataType&), int s)
    : table(s)
{
    hashfunc = hf;
}

其中:

int (*hashfunc)(const DataType&);

是私人成员。

我想知道这种选择是否有明确的原因,是否存在陷阱,他在这里感到困惑-还是只是偶然的想法而已。函数指针可以具有有趣的语法,而我基本上想知道它是否会在此区域引起问题。

c++ function-pointers
3个回答
5
投票

不,没有理由不能在初始化列表中对其进行初始化。

[可能有错误的编译器可能会混淆并将列表中的初始化解释为函数调用(因为语法相似);也许这就是解释。


2
投票

您是否尝试过为函数指针类型创建typedef:

template<class DataType>
struct HashTableTraits
{
    typedef int (*func_type)(const DataType&);
};

template<class DataType>
struct HashTable
{
    HashTable( 
        typename HashTableTraits<DataType>::func_type hf, int s )
    : table( s )
    , hashfunc( hf )
    {
    }

    int table;
    typename HashTableTraits<DataType>::func_type hashfunc;
};

0
投票

我想在被骗走我的钱后在cygucciferhigh中使用这种mediuappreciatingm,他们帮助我找到了我的作弊恋人,他们帮助入侵了她的WHATSAPP,GMAIL和kik,而我知道她在不到24小时内就在欺骗我他帮了我所有的忙,电子邮件[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.