V*********y 发帖数: 37 | 1 这个面试很有意思
约一个时间,发一个cpp文件过来,里面有8个问题
要求2个小时之内必须发回去一个文件,无论答完没答完
然后明说有些题可能没有确切答案,可能是一个problem而不是一个task,
可以查书,google,各种开卷
有一道题是这样的:
写一个函数,用来返回其他某个(成员)函数的参数个数,如果该函数的参数不是一个函
数,
则返回-1
我觉得这道题貌似无解。。。求牛人指点。。。。 |
a****s 发帖数: 524 | 2 I thought it for a while because it looks interesting.
Although I didn't work through to the final solution, I am pretty sure this
can be solved in compile time by using templates
The idea is creating template functions for all possible number of arguments
a function can have, the limit I believe is 256.
For exmaple: assuming all functions return void.
typedef void(MyClass::*funcany)(...);
int count ( (void (MyClass::*func0)()) fp)
{
if (!static_cast(fp))
return -1;
return 0;
}
template
int count ( (void (MyClass::*func1)(A1)) fp)
{
if (!static_cast(fp))
return -1;
return 1;
}
template
int count ( (void (MyClass::*func2)(A1,A2)) fp)
{
if (!static_cast(fp))
return -1;
return 2;
}
....
int main()
{
int num_args;
num_args = count(&NotMyClass::somefunc); // -1
num_args = count(&MyClass::somefunc); // depends on declaration
}
of course the return type doesn't have to be void, it can be a template parameter too. That just add a layer of complexity and the same idea still works.
also, it might be possible to work out some template recursion so that you don't have to write the same thing 256 times.
【在 V*********y 的大作中提到】 : 这个面试很有意思 : 约一个时间,发一个cpp文件过来,里面有8个问题 : 要求2个小时之内必须发回去一个文件,无论答完没答完 : 然后明说有些题可能没有确切答案,可能是一个problem而不是一个task, : 可以查书,google,各种开卷 : 有一道题是这样的: : 写一个函数,用来返回其他某个(成员)函数的参数个数,如果该函数的参数不是一个函 : 数, : 则返回-1 : 我觉得这道题貌似无解。。。求牛人指点。。。。
|
w******i 发帖数: 503 | 3 smart idea...
this
arguments
【在 a****s 的大作中提到】 : I thought it for a while because it looks interesting. : Although I didn't work through to the final solution, I am pretty sure this : can be solved in compile time by using templates : The idea is creating template functions for all possible number of arguments : a function can have, the limit I believe is 256. : For exmaple: assuming all functions return void. : typedef void(MyClass::*funcany)(...); : int count ( (void (MyClass::*func0)()) fp) : { : if (!static_cast(fp))
|
n****e 发帖数: 2401 | 4 悉尼不是谁都能去的。
this
arguments
【在 a****s 的大作中提到】 : I thought it for a while because it looks interesting. : Although I didn't work through to the final solution, I am pretty sure this : can be solved in compile time by using templates : The idea is creating template functions for all possible number of arguments : a function can have, the limit I believe is 256. : For exmaple: assuming all functions return void. : typedef void(MyClass::*funcany)(...); : int count ( (void (MyClass::*func0)()) fp) : { : if (!static_cast(fp))
|
o**o 发帖数: 3964 | 5 我要吐了
【在 w******i 的大作中提到】 : smart idea... : : this : arguments
|
S***t 发帖数: 42 | 6
能给个确切的描述吗?
【在 V*********y 的大作中提到】 : 这个面试很有意思 : 约一个时间,发一个cpp文件过来,里面有8个问题 : 要求2个小时之内必须发回去一个文件,无论答完没答完 : 然后明说有些题可能没有确切答案,可能是一个problem而不是一个task, : 可以查书,google,各种开卷 : 有一道题是这样的: : 写一个函数,用来返回其他某个(成员)函数的参数个数,如果该函数的参数不是一个函 : 数, : 则返回-1 : 我觉得这道题貌似无解。。。求牛人指点。。。。
|