Re: template function within template class
"Itchy" <tobhe067@student.liu.se> wrote...[color=blue]
> I just don't understand why my compiler complains about this line in
> my program (see below). Maybe you can help me?
>
> You can skip all the overloaded operators. I've marked the problem
> areas. I get error in function generate_subkeys()[/color]
As soon as I removed the second operator[] ('reference' was undefined)
and changed all other places were it was used, the code compiles. It
is possible that your compiler is not good enough. Visual C++ v6 is
like that. You should consider getting a better compiler if yours is
VC++ v6 and you want to be able to handle member templates.
[color=blue]
>
> /Itchy
>[/color]
/*****************************************/
#include <bitset>
using namespace std;
template <size_t bits>
class Block : public bitset<bits>
{
public:
bool operator[](size_t pos) const
{
return bitset<bits>::operator[]((bits - pos) % bits);
}
Block& operator<<=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) (*this)[i];
return (*this = b);
}
Block& operator>>=(size_t pos)
{
Block b(*this);
for (int i = 1; i <= bits; i++) (*this)[i];
return (*this = b);
}
Block operator<<(size_t pos) { return (Block(*this) <<= pos); }
Block operator>>(size_t pos) { return (Block(*this) <<= pos); }
/********* LOOK HERE!! PROBLEM **********************************/
template <size_t subbits>
Block<subbits> subset(size_t left, size_t right)
{
Block<subbits> b;
for (int i = left; i <= right; i++) (*this)[i];
return b;
}
};
int PC1[10];
class DES
{
public:
//protected:
void apply_pc1()
{
for (int i = 1; i <= 56; i++) key[PC1[i - 1]];
}
void generate_subkeys()
{
Block<28> left;
bool b;
//, right;
for (int r = 1; r <= 16; r++)
{
/********* LOOK HERE!! PROBLEM
**********************************/
// IT CANT FIND MY TEMPLATE FUNCTION. COMPILER SAYS IT RETURNS
BOOL?!?!
left = newkey.subset<28>(1, 28); // <----- ERROR
}
}
private:
Block<64> key;
Block<56> newkey;
Block<28> subkeys[16];
};
int main()
{
DES des;
des.generate_subkeys();
return 0;
}
Victor |