s******o 发帖数: 2233 | 1 面试的时候碰到的一个题目,写一个compile time的log2(N)的function
不知道这种做法在实际中有啥用处么?
用普通recursive function的话又好写又容易看懂 |
g*********s 发帖数: 1782 | 2 can you give more details about the problem.
【在 s******o 的大作中提到】 : 面试的时候碰到的一个题目,写一个compile time的log2(N)的function : 不知道这种做法在实际中有啥用处么? : 用普通recursive function的话又好写又容易看懂
|
s******o 发帖数: 2233 | 3 Q: write a function that calculates log(2)N at compile time
【在 g*********s 的大作中提到】 : can you give more details about the problem.
|
a****l 发帖数: 8211 | 4 当然有用啦,因为你不可能写一个程序比这个更快更省空间的了.
【在 s******o 的大作中提到】 : 面试的时候碰到的一个题目,写一个compile time的log2(N)的function : 不知道这种做法在实际中有啥用处么? : 用普通recursive function的话又好写又容易看懂
|
g*********s 发帖数: 1782 | 5 then how do u do input/output?
【在 s******o 的大作中提到】 : Q: write a function that calculates log(2)N at compile time
|
p***o 发帖数: 1252 | 6 That's part of the solution you need to figure out.
【在 g*********s 的大作中提到】 : then how do u do input/output?
|
g*********s 发帖数: 1782 | 7 so u mean if u type "gcc foo.cpp 8" it will give you a message "3"?
【在 p***o 的大作中提到】 : That's part of the solution you need to figure out.
|
s******o 发帖数: 2233 | 8 something like this:
template
struct log2n
{
enum { Value = 1 + log2n::Value };
};
template<>
struct log2n<1>
{
enum { Value = 0 };
};
int main(int argc, char* argv[])
{
int n = log2n<16>::Value;
printf("%d\n", n");
return 0;
}
【在 g*********s 的大作中提到】 : so u mean if u type "gcc foo.cpp 8" it will give you a message "3"?
|
N***m 发帖数: 4460 | 9 不带这么欺负人的吧?
log2n<奇数>怎么办啊?
【在 s******o 的大作中提到】 : something like this: : template : struct log2n : { : enum { Value = 1 + log2n::Value }; : }; : template<> : struct log2n<1> : { : enum { Value = 0 };
|
s******o 发帖数: 2233 | 10 只需要考虑整数的情况,比如log2(7)=2, log2(8)=3, log2(9)=3 etc...
【在 N***m 的大作中提到】 : 不带这么欺负人的吧? : log2n<奇数>怎么办啊?
|
d***q 发帖数: 1119 | 11
it will fail to be compiled if odd number is there...
meta programming is somehow to be used as DSL..
however my personal experience is not to use them or use them in a
restricted range...
【在 N***m 的大作中提到】 : 不带这么欺负人的吧? : log2n<奇数>怎么办啊?
|