gpt4 book ai didi

c++ - const int*& 与 typedef int* IntPtr

转载 作者:太空狗 更新时间:2023-10-29 19:44:14 26 4
gpt4 key购买 nike

为什么我必须将 int * 更改为 typedef int * IntPtr 才能编译?

template <class T>
class A
{
public:
template <class X>
void a(X *x, void (X::*fun)(const T&))
{
}
};

typedef int * IntPtr;

class B
{
public:
B() : a()
{
a.a(this, &B::foo); // this won't work
}
void foo(const int *&) // must replace `int *` here with `IntPtr`
{
}
A<int *> a; // ...and here
};

class C
{
public:
C() : a()
{
a.a(this, &C::foo);
}
void foo(const IntPtr&)
{
}
A<IntPtr> a;
};

我明白为什么 typedef 很有用,但不明白为什么需要它们。 C 类编译得很好,B 却没有。

这是来自 MSVC++ 2008 编译器的错误:

Error   1   error C2784: 'void A<T>::a(X *,void (__thiscall X::* )(const T &))' : could not deduce template argument for 'void (__thiscall X::* )(const T &)' from 'void (__thiscall B::* )(const int *&)'

最佳答案

const int*&typedef int* IntPtr; const IntPtr& 不一样。在第一种情况下,常量是 int,在第二种情况下,它是指针。只有第二种情况与您的模板兼容。

如果你写

void foo(int * const &);

相反,它应该可以正常编译和工作。

关于c++ - const int*& 与 typedef int* IntPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778490/

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