gpt4 book ai didi

c++ - 类模板多重继承和函数重载

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:09 33 4
gpt4 key购买 nike

为什么下面 main 中对 waitForEvent 的函数调用不明确?

#include <iostream>
struct Event1 { char c1[1]; };
struct Event2 { char c2[2]; };

template<class Event> struct EventSource
{
void waitForEvent(Event e) { std::cout << sizeof(e) << "\n"; };
};

typedef EventSource<Event1> Event1Source;
typedef EventSource<Event2> Event2Source;

struct Event12Source : public Event1Source, public Event2Source {};

int main()
{
Event12Source source;

source.waitForEvent(Event1());
source.waitForEvent(Event2());

return 0;
}

编译它我得到以下错误:

user@AHERLADUSERVM2:~/test/TemplateMultipleMethodInheritance$ g++ test.cpp  test.cpp: In function ‘int main()’: test.cpp:19:12: error: request for member ‘waitForEvent’ is ambiguous
source.waitForEvent(Event1());
^ test.cpp:7:10: note: candidates are: void EventSource<Event>::waitForEvent(Event) [with Event = Event2]
void waitForEvent(Event e) { std::cout << sizeof(e) << "\n"; };
^ test.cpp:7:10: note: void EventSource<Event>::waitForEvent(Event) [with Event = Event1] test.cpp:20:12: error: request for member ‘waitForEvent’ is ambiguous
source.waitForEvent(Event2());
^ test.cpp:7:10: note: candidates are: void EventSource<Event>::waitForEvent(Event) [with Event = Event2]
void waitForEvent(Event e) { std::cout << sizeof(e) << "\n"; };
^ test.cpp:7:10: note: void EventSource<Event>::waitForEvent(Event) [with Event = Event1]

(为什么)这不是一个简单的函数重载解析案例?

谢谢,达米安

最佳答案

这可能不是你想要的,但它会解决歧义

source.EventSource<Event1>::waitForEvent(Event1());
source.EventSource<Event2>::waitForEvent(Event2());

此外,如果您曾经想要向 Event1 和 Event2 添加基类,请注意 this

关于c++ - 类模板多重继承和函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313205/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com