#include <stdint.h>
#include <vector>
// Of this, I only want one instance per type,
// because the table can get big.
template<class T>
struct LookUp
{
static int const SIZE = 1 << sizeof(T);
std::vector<T> table;
LookUp()
: table{ SIZE }
{
for (int i = 0; i < SIZE; ++i)
{
// Dummy code
table[i] = i;
}
}
};
// "Normal" template class with common code for all types.
template<class T>
struct LbpHelper
{
typedef void* image;
};
// No functionality for the general case.
template<class T>
class Lbp
{
};
// But for this (among others) we have something.
template<>
class Lbp<uint8_t> : public LbpHelper<uint8_t>
{
typedef uint8_t value_type;
typedef Lbp::image image;
static LookUp<value_type> _lookup; // <-- This is the mean one.
public:
// Stuff...
};
LookUp<uint8_t> Lbp<uint8_t>::_lookup{};
int main()
{
}
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8gT2YgdGhpcywgSSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciB0eXBlLAovLyBiZWNhdXNlIHRoZSB0YWJsZSBjYW4gZ2V0IGJpZy4KdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IExvb2tVcAp7CiAgICBzdGF0aWMgaW50IGNvbnN0IFNJWkUgPSAxIDw8IHNpemVvZihUKTsKICAgIHN0ZDo6dmVjdG9yPFQ+IHRhYmxlOwoKICAgIExvb2tVcCgpCiAgICAgICAgOiB0YWJsZXsgU0laRSB9CiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyArK2kpCiAgICAgICAgewogICAgICAgICAgICAvLyBEdW1teSBjb2RlCiAgICAgICAgICAgIHRhYmxlW2ldID0gaTsKICAgICAgICB9CiAgICB9Cn07CgovLyAiTm9ybWFsIiB0ZW1wbGF0ZSBjbGFzcyB3aXRoIGNvbW1vbiBjb2RlIGZvciBhbGwgdHlwZXMuCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBMYnBIZWxwZXIKewogICAgdHlwZWRlZiB2b2lkKiBpbWFnZTsKfTsKCi8vIE5vIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBnZW5lcmFsIGNhc2UuCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIExicAp7Cn07CgovLyBCdXQgZm9yIHRoaXMgKGFtb25nIG90aGVycykgd2UgaGF2ZSBzb21ldGhpbmcuCnRlbXBsYXRlPD4KY2xhc3MgTGJwPHVpbnQ4X3Q+IDogcHVibGljIExicEhlbHBlcjx1aW50OF90Pgp7CiAgICB0eXBlZGVmIHVpbnQ4X3QgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgTGJwOjppbWFnZSBpbWFnZTsKCiAgICBzdGF0aWMgTG9va1VwPHZhbHVlX3R5cGU+IF9sb29rdXA7IC8vIDwtLSBUaGlzIGlzIHRoZSBtZWFuIG9uZS4KCnB1YmxpYzoKCiAgICAvLyBTdHVmZi4uLgp9OwoKTG9va1VwPHVpbnQ4X3Q+IExicDx1aW50OF90Pjo6X2xvb2t1cHt9OwoKaW50IG1haW4oKQp7CgkKfQ==