■
サンプルソース。gcc-3.3 on MacOS X で実験 (-O3 -S) すると、
- use_static_for() は即値 (5445) を返す。
- use_normal_for() は真面目にループを回す。
#include <iostream>
#include <boost/call_traits.hpp>
#include <Static_For.h>template <typename T>
class Sum {
public:
typedef typename boost::call_traits<T>::value_type value_type;
typedef typename boost::call_traits<T>::param_type param_type;public:
Sum() : value_(0) {}void operator()(param_type value) {
value_ += value;
}value_type operator*() const {
return value_;
}
};int use_static_for() {
return *Static_For<100>::static_for(Sum<std::size_t>());
}int use_normal_for() {
std::size_t value = 0;
for (std::size_t i = 0; i < 100; ++i) {
value += i;
}
return value;
}int
main(int, char* []) {
std::cout
<< use_static_for() << std::endl
<< use_normal_for() << std::endl;
return 0;
}