can*_*rem 1 c++ templates function-pointers
我有这个问题:
template<typename T> class Bubu
{
...
int (*comparer)(const T t1, const T t2);
...
public:
Bubu(int (*_comparer)(const T t1, const T t2))
{
comparer = _comparer;
}
};
Run Code Online (Sandbox Code Playgroud)
在另一个文件中:
Bubu<char*> asd(strcmp);
Run Code Online (Sandbox Code Playgroud)
错误:
error C2664: 'Bubu<T>::Bubu(int (__cdecl *)(const T,const T))' :
cannot convert parameter 1 from 'int (__cdecl *)(const char *,
const char *)' to 'int (__cdecl *)(const T,const T)'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.编译器不应该看到"char*"而不是"T"吗?
编辑:Ideone.com准备好的代码:
int asdf(const char* a, const char* b)
{ return 0; }
template class Bubu
{
int (*comparer)(const T t1, const T t2);
public:
Bubu(int (*_comparer)(const T t1, const T t2))
{
comparer = _comparer;
}
};
int main(int argc, char* argv[])
{
Bubu asd(asdf);
}
Run Code Online (Sandbox Code Playgroud)
如果T是char*,const T是char* const这是不一样的东西const char *.你需要:
Bubu<const char*> asd(strcmp);
Run Code Online (Sandbox Code Playgroud)
对于函数签名,顶级const被忽略
int (*)( const char* const, const char* const );
Run Code Online (Sandbox Code Playgroud)
与...的类型相同
int (*)( const char*, const char* );
Run Code Online (Sandbox Code Playgroud)
所以你在额外的顶级const上没问题,虽然它不会让你获得更简单的东西int (*comparer)(T t1, T t2);.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |