小编Bal*_*ram的帖子

指向一个模板化函数的不同实例的指针保证比较不相等?

假设指向一个模板化函数的不同实例的两个函数指针将比较不相等是否安全?即使模板化的函数根本不使用模板参数,因此在每种情况下都完全相同?

例如,以下在我的编译器上工作正常,但我不确定它是否在其他任何方面:

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)

c++ templates function-pointers

12
推荐指数
1
解决办法
230
查看次数

无法从类型x转换为类型x?

编译时(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,不会出现此类错误.

这是一个错误还是我做错了什么?

编辑: 那么,如果它是一个错误,有谁知道如何解决这个问题?也许通过使用演员阵容?我需要这段代码来编译......

c++ function-pointers visual-studio

11
推荐指数
1
解决办法
2593
查看次数

冷凝.cpp文件的缺点?

在MSVC++中编译"静态库"项目时,我经常会得到几MB大小的.lib文件.如果我在编译时使用条件宏并包含指令来"压缩"一个.cpp文件中的所有.cpp文件,则.lib文件大小会大大减少.

这种做法有什么缺点吗?

c++ visual-studio

4
推荐指数
1
解决办法
254
查看次数

标签 统计

c++ ×3

function-pointers ×2

visual-studio ×2

templates ×1