是否可以编写一个模板来改变行为,具体取决于是否在类上定义了某个成员函数?
这是我想写的一个简单例子:
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"部分.
为了创建算法模板函数,我需要知道类中的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) 我有一个关于(重新)定义函数的问题.我的目标是有一个脚本,我可以选择定义一个函数.像这样:
void func(){}
int main(){
if (func)func();
}
Run Code Online (Sandbox Code Playgroud)
没有这个功能,只需:
int main(){
if (func)func();
}
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?
此问题适用于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)
谢谢!
我正在寻找像EJB3一样的C++组件框架(当然,它只是Java)或Corba组件.但我不是在寻找Corba Components.
我的要求是
编辑:
提前致谢.
c++ ×3
c ×2
sfinae ×2
templates ×2
components ×1
corba ×1
frameworks ×1
function ×1
g++ ×1
ios ×1