相关疑难解决方法(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万
查看次数

如何检测类中是否有特定的成员变量?

为了创建算法模板函数,我需要知道类中的x或X(和y或Y)是模板参数.当我的函数用于MFC CPoint类或GDI + PointF类或其他类时,它可能很有用.他们都使用不同的x.我的解决方案可以简化为以下代码:


template<int> struct TT {typedef int type;};
template<class P> bool Check_x(P p, typename TT<sizeof(&P::x)>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<sizeof(&P::X)>::type b = 0) { return false; }

struct P1 {int x; };
struct P2 {float X; };
// it also could be struct P3 {unknown_type X; };

int main()
{
    P1 p1 = {1};
    P2 p2 = {1};

    Check_x(p1); // must return true
    Check_x(p2); // must return false

    return …
Run Code Online (Sandbox Code Playgroud)

c++ templates g++ sfinae visual-studio

62
推荐指数
5
解决办法
3万
查看次数

我可以重新定义一个函数或检查它是否存在?

我有一个关于(重新)定义函数的问题.我的目标是有一个脚本,我可以选择定义一个函数.像这样:

void func(){}

int main(){
   if (func)func();
}
Run Code Online (Sandbox Code Playgroud)

没有这个功能,只需:

int main(){
   if (func)func();
}
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

c function

9
推荐指数
2
解决办法
7731
查看次数

检查C风格函数是否存在"MyMethodName()"类型?

此问题适用于iOS版本兼容性.

我知道如果函数存在,如果它是使用respondsToSelector的典型Objective-C样式方法,则该函数是否存在.即对于如下方法:

- (void) someMethod:(NSInteger)someParameter;
Run Code Online (Sandbox Code Playgroud)

您可以使用:

if ([self respondsToSelector:@selector(someMethod:someParameter)]) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

但是C风格的功能呢?如何检查是否存在如下函数:

void CStyleFunctionName(FoundationTypeRef parameter);
Run Code Online (Sandbox Code Playgroud)

谢谢!

c ios

7
推荐指数
2
解决办法
3655
查看次数

Corba组件之外的任何C++组件框架是否存在?

我正在寻找像EJB3一样的C++组件框架(当然,它只是Java)或Corba组件.但我不是在寻找Corba Components.

我的要求是

  • 便携式(linux,unix,可选Windows)
  • C++接口(因此,不要求用C++编写框架本身)
  • optinal有充分记录或给出了很好的例子

编辑:

  • 应支持远程对象(远程过程调用).[XPCOM不支持远程对象]

提前致谢.

c++ components frameworks corba

2
推荐指数
1
解决办法
1369
查看次数