相关疑难解决方法(0)

是否可以编写模板来检查函数的存在?

是否可以编写一个模板来改变行为,具体取决于是否在类上定义了某个成员函数?

这是我想写的一个简单例子:

template<class T>
std::string optionalToString(T* obj)
{
    if (FUNCTION_EXISTS(T->toString))
        return obj->toString();
    else
        return "toString not defined";
}
Run Code Online (Sandbox Code Playgroud)

所以,如果class T已经toString()确定的话,就使用它; 否则,它没有.我不知道怎么做的神奇部分是"FUNCTION_EXISTS"部分.

c++ templates sfinae template-meta-programming

458
推荐指数
20
解决办法
14万
查看次数

使用enable_if检查成员是否存在

这是我正在尝试做的事情:

template <typename T> struct Model
{
    vector<T> vertices ;

    #if T has a .normal member
    void transform( Matrix m )
    {
        each vertex in vertices
        {
          vertex.pos = m * vertex.pos ;
          vertex.normal = m * vertex.normal ;
        }
    }
    #endif

    #if T has NO .normal member
    void transform( Matrix m )
    {
        each vertex in vertices
        {
          vertex.pos = m * vertex.pos ;
        }
    }
    #endif
} ;
Run Code Online (Sandbox Code Playgroud)

我已经看过使用的例子enable_if,但是我无法理解如何应用enable_if这个问题,或者甚至可以应用它.

c++ templates sfinae

29
推荐指数
3
解决办法
2万
查看次数

使用Boost类型特征进行条件编译

我有一个模板,我想根据参数的类型有条件地编译.我只关心区分"普通旧数据"(POD),即整数等,或类/结构.我在Windows上使用c ++ VS2008.

template<T>
class foo
{
    void bar(T do_something){
    #if IS_POD<T>
        do something for simple types
    #else
        do something for classes/structs
    #endif
}}
Run Code Online (Sandbox Code Playgroud)

我一直在看升级库,我可以看到它们似乎有我想要的东西.但是,我不明白该#if语句的正确语法是什么.

任何帮助,将不胜感激.


编辑---在阅读回复后,我发现在我对问题的定义中忽略了一些内容.Class foo是一个模板化的类,只需要实例化的版本bar是正确的class type T.我一直在寻找一个可以在编译时解决的解决方案.希望这能解决我的问题.

c++ boost

7
推荐指数
1
解决办法
2454
查看次数