- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
template<size_t n>
struct counterNumber {
char data[n+1];
};
template<size_t index, size_t val>
counterNumber<val> magic(counterNumber<index>, counterNumber<val>);
#define COUNTER_READ() \
(sizeof( \
magic(counterNumber<1>(), \
magic(counterNumber<2>(), \
magic(counterNumber<4>(), \
magic(counterNumber<8>(), \
magic(counterNumber<16>(), \
magic(counterNumber<32>(), \
magic(counterNumber<64>(), \
magic(counterNumber<128>(), counterNumber<0>())))))))))-1)
#define COUNTER_INC() \
counterNumber<COUNTER_READ()+1> magic( \
counterNumber<(COUNTER_READ()+1)&~COUNTER_READ()>, \
counterNumber<(COUNTER_READ()+1)&COUNTER_READ()>)
#include <iostream>
using namespace std;
#define TO_STRING(x) #x
#define REG_FUNCTIONAL(headFunction) \
template<> \
constexpr auto foo< COUNTER_READ() >() \
{ \
return TO_STRING(headFunction); \
} \
COUNTER_INC(); \
headFunction
template<size_t n>
constexpr auto foo(void){return "";}
REG_FUNCTIONAL(void function(int a)){(void)a;}
REG_FUNCTIONAL(void function1(int a)){(void)a;}
// your code goes here
template<size_t n>
std::string callFoo()
{
return std::string(foo<n>())+callFoo<n-1>();
}
template<>
std::string callFoo<0>()
{
return std::string(foo<0>());
}
int main() {
std::cout<<callFoo<COUNTER_READ()-1>();
return 0;
}
IKing 21.11.2015 03:39 # 0
guest 21.11.2015 03:45 # +5
с правую рукою
Milonov 23.11.2015 17:03 # −1
kegdan 21.11.2015 06:30 # 0
Antervis 23.11.2015 06:16 # 0
> // your code goes here
это обычно свидетельствует о совместном творчестве
bormand 23.11.2015 07:50 # +1
Не говно в общем-то. Просто магический костыль, которых для крестов уже сотни.