0
그래서 함수 포인터의 배열을 저장할 수있는 Delegate 클래스가 있습니다. Player.cpp에서함수 포인터의 배열 (멤버 함수 포함) 템플릿 특수화 오류가 발생했습니다
template<typename Func>
class delegate
{
private:
public:
typename std::vector<Func> mListOfFunctions;
void Bind(Func f)
{
mListOfFunctions.push_back(f);
}
template<typename...TArgs>
void Invoke(TArgs&&...arg)
{
for (auto f : mListOfFunctions)
{
f(std::forward<TArgs>(arg)...);
}
}
};
사용법 : :이 코드는이 오류 C2893가 발생합니다
delegate<void(float)> testDelegate;
testDelegate.Bind(std::bind(&Player::MoveLeft,this));
(오류 C2893 기능 템플릿을 전문으로하지 못했습니다 '알 수없는 형 표준 : 호출 (_Callable & &) ') ...
을 & & _Types하지만 난 다음에 바인딩의 정의를 변경할 때 :
,template<typename F>
void Bind(F f)
{
}
잘 작동하지만 벡터에 함수 객체를 푸시하면 동일한 오류가 다시 발생합니다. 해결 방법이 있습니까? 전달 된 포인터를 캐쉬해야합니다.
다음과 여전히 오류가 발생합니다 : 무효 바인딩 (표준 : 기능을 <당신이
std::forward
를 사용하고 있기 때문에, 당신은std::function
사용할 수있는 의미있는 C++ (11)를 사용하고 있어야합니다 returnType (TArgs ...)> f) \t { \t \t mListOfFunctions.push_back (f); \t} –왜 그렇게하고 있습니까? 내가 게시 한 코드를 사용하지 않는 이유는 무엇입니까? –
는 내가 한 너무 : 템플릿 <유형 이름 Func을> 클래스 위임 { 개인 : 공공 : \t 유형 이름의 표준 : : 벡터 <표준 : 기능> mListOfFunctions; \t 공극 귀속 (표준 : 함수 F) { \t \t \t mListOfFunctions.push_back (F); \t} \t 서식 <유형 이름 ... TArgs> \t 공극 호출 (TArgs && ... ARG) \t {(자동 F : mListOfFunctions) 용 \t \t \t \t { \t \t \t F (표준 : 앞으로 (arg) ...); \t \t} \t} }; 하지만 Bind를 호출하면 오류가 다시 발생합니다. –