The easiest way is to define a friend in the class:
template<class T>
class MyVar
{
int x;
friend void printVar(const MyVar & var) {
std::cout << var.x << std::endl;
}
friend void scanVar(MyVar & var) {
std::cin >> var.x;
}
};
The disadvantage is that functions can only be called via argument-dependent searches. This is not a problem in your example, but it can be a problem if they do not have a suitable argument or if you want to specify a name without calling it.
, ( ), ( ). . , :
template <typename T> class MyVar;
template <typename T> void printVar(const MyVar<T> & var);
template<class T>
class MyVar
{
int x;
friend void printVar<T>(const MyVar<T> & var);
};
template <typename T> void printVar(const MyVar<T> & var) {
std::cout << var.x << std::endl;
}