小编bra*_*ter的帖子

为什么模板函数指针出现链接器错误?

我有一个 EventMgr 类,它有一个模板函数来注册一个监听器。但是,当我注册一个监听器时,链接器给了我一个“错误 LNK2019:未解析的外部符号”。

开胃菜代码:

class EventMgr {

 template< class T, class EvenT>
 void RegisterListener(T* listener, int EventType, void (T::*MemFunc)(EvenT*) );
}
Run Code Online (Sandbox Code Playgroud)

SoundMgr(它是一个侦听器)尝试注册事件:

SoundMgr::SoundMgr(void)
{
  EventManager::GetInstance()->RegisterListener(this, 1, (&SoundMgr::handleBulletFired));
}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它不会链接。为什么找不到引用类型?

c++ templates function-pointers linker-errors

1
推荐指数
1
解决办法
2488
查看次数

我应该如何使用google guava hashCode()调用super.hashcode

public abstract class HolidayPackageVariant {
private HolidayPackage holidayPackage;
private String typeHolidayPackage;

@Override
    public int hashCode() {
        return Objects.hashCode(getTypeHolidayPackage(), getHolidayPackage());
    }
}

public final class FlightHolidayPackageVariant extends HolidayPackageVariant{
private Destination originCity;

@Override
    public int hashCode() {
        // need to add super.hashCode() here somehow ?
        return Objects.hashCode(getOriginCity() );
    }
}
Run Code Online (Sandbox Code Playgroud)

Google guava hashode():Objects.hashCode适用于成员对象.如何在derived :: hashCode()中指定超类hashCode()?我可以直接在派生类hashCode()函数中使用super.members,但是如果super.hashCode()以任何方式更改,那么这将不会反映在derived:hashCode(...)中.

java hash hashcode guava

1
推荐指数
2
解决办法
1634
查看次数

如何使用番石榴改进Map <Integer,Map <Integer,Map <PAXType,BigDecimal >>>

我有实体关系的以下数据结构:

Map<Integer, Map<Integer, Map<PAXType, BigDecimal>>>
Run Code Online (Sandbox Code Playgroud)

实体关系:

  • 1 Package(P)有很多Variants(V)
  • 1 Variants(V)有许多Price数据点
  • Price是基于PAXType(这是一个枚举:成人,儿童,婴儿)

我用这个模拟了这个:

Map<Package, Map<Variant, Map<PAXType, BigDecimal>>>
Run Code Online (Sandbox Code Playgroud)

为了快速查找价格

  • 包装变种

我现在使用它的方式是:当我从数据库中读取数据时,我创建/更新上面的地图.获得所有信息后,对于每个变体,我需要转换价格图,从中Map<PAXType, BigDecimal>Map<OccupancyType, BigDecimal>,其中OccupancyType是另一个枚举.这是我需要输出序列化等的最终价格格式.

番石榴中是否有任何数据结构适合我所拥有的丑陋的地图构造并支持我上面建议的操作?

java map guava

1
推荐指数
1
解决办法
182
查看次数

":: functionName()"在c ++中意味着什么?

我遇到了一段看起来像这样的代码:

::GetSystemDirectory(buffer, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

我从来没有见过一个空的函数调用::.我一直看到它们与命名空间一起使用.

有人可以解释一下我的::意思是什么?

c++

1
推荐指数
1
解决办法
234
查看次数

如何在运行时识别对象的类型?

类别:

public abstract class BaseHolidayPackageVariant {
    private Integer variantId;
    private HolidayPackage holidayPackage;
    private String holidayPackageType;
}

public class LandHolidayPackageVariant extends BaseHolidayPackageVariant{

}

public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant{
    private Destination originCity;
}

public class HolidayPackage{
    ArrayList<BaseHolidayPackageVariant> variants;

    BaseHolidayPackageVariant defaultVariant;
}
Run Code Online (Sandbox Code Playgroud)

在运行时,如何知道variants []中的给定对象是否为Type,LandPackageVariant或者FlightPackageVariant不执行以下某种操作:

if(holidayPackageType.equals("LandHolidayPackageVariant")
 obj = (LandHolidayPackageVariant)variant[i];
else if(holidayPackageType.equals("FlightHolidayPackageVariant")
 obj = (FlightHolidayPackageVariant)variant[i];
Run Code Online (Sandbox Code Playgroud)

这个问题源于我在这里提出的设计问题

java oop design-patterns

0
推荐指数
1
解决办法
97
查看次数

为什么要调用基函数?

在以下代码中:

#include <iostream>
using namespace std;

class A {
    public:
    A() {
        cout << " A constructor \n";
        sum(2,4);
    }
    virtual int sum(int a, int b){
        cout << "Base sum \n";
        return a + b;
    }
};

class B : public A {
    public:
    B() : A() {
        cout << " B constructor \n";
    }

    int sum(int a, int b){
        cout << "Overloaded sum \n";
        return (a + b) * 10;
    }
};

int main(){
    A* a = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor virtual-functions vtable

0
推荐指数
1
解决办法
96
查看次数