假设指向一个模板化函数的不同实例的两个函数指针将比较不相等是否安全?即使模板化的函数根本不使用模板参数,因此在每种情况下都完全相同?
例如,以下在我的编译器上工作正常,但我不确定它是否在其他任何方面:
class TypeChecker
{
public:
template< typename T > static void foo( void )
{}
template< typename T > static void setType( void )
{ s_fooPtr = &foo< T >; }
template< typename T > static bool checkType( void )
{ return ( s_fooPtr == &foo< T > ); }
private:
static void ( * s_fooPtr )( void );
};
void ( * TypeChecker::s_fooPtr )( void ) = 0;
int main( void )
{
TypeChecker::setType< char >();
TypeChecker::checkType< char …Run Code Online (Sandbox Code Playgroud) 编译时(Microsoft Visual C++ 2005 Express)这段代码:
struct A
{
template< typename T > static A Foo( void ) { return A(); }
struct S
{
template< typename T > static S GetInstance( void )
{
S Result;
Result.m_funcFoo = &A::Foo< T >;
return Result;
}
A ( *m_funcFoo )( void );
};
};
int main(int argc, char* argv[])
{
A::S::GetInstance< int >();
}
Run Code Online (Sandbox Code Playgroud)
我收到一个C2440错误:
'=':无法从'A(__ cdecl*)(void)'转换为'A(__ cdecl*)(void)'
这对我来说没有意义.错误文本中指定的两种类型显然是相同的.此外,当将Foo返回值更改为时int,不会出现此类错误.
这是一个错误还是我做错了什么?
编辑: 那么,如果它是一个错误,有谁知道如何解决这个问题?也许通过使用演员阵容?我需要这段代码来编译......
在MSVC++中编译"静态库"项目时,我经常会得到几MB大小的.lib文件.如果我在编译时使用条件宏并包含指令来"压缩"一个.cpp文件中的所有.cpp文件,则.lib文件大小会大大减少.
这种做法有什么缺点吗?