Внутри шаблонной функции C ++ я хотел бы вызвать другую перегруженную функцию, которая еще не была объявлена. Поскольку функция не зависит, компилятор не сможет ее разрешить.
Код выглядит так:
#include <array>
#include <iostream>
#include <string>
template <typename T>
void serialize(const T &data)
{
size_t data_size = getSize(data);
std::cout << "Size: " << data_size << std::endl;
}
constexpr size_t getSize(const int &)
{
return sizeof(int);
}
size_t getSize(const std::string &str)
{
return str.size();
}
template <typename T, size_t N>
size_t getSize(const std::array<T, N> &array)
{
size_t array_size = 0;
for (const T &element : array)
array_size += getSize(element);
return array_size;
}
int main()
{
int a;
serialize(a);
std::string str = "foo";
serialize(str);
std::array<std::string, 2> arr = {{"foo", "foobar"}};
serialize(arr);
return 0;
}
Есть ли хороший способ сделать getSize()
зависимым? Или есть другие способы добиться этого?