Да, есть способ, но в вашем коде требуется небольшая модификация:
#include <iostream>
#include <type_traits>
class my_class {
private:
static constexpr const char c_str_[6] = {'V', 'a', 'a', 'n', 'i', '\0'};
public:
static constexpr auto c_str() -> const char( &)[6] {
return c_str_;
}
};
int main(int , char *[])
{
std::remove_reference< decltype( my_class::c_str())>::type arr = { 'S', 'a', 'a', 'v', 'i', '\0'};
std::cout<< arr<< " is a beautiful name."<< std::endl;
return 0;
}
Вывод: Saavi is a beautiful name.
Сейчас my_class::c_str()
возвращаемая ссылка const char ( &)[6]
.Эта ссылка очень особенная, потому что она может ссылаться только на константный массив типа char
, имеющий длину 6
и отличающийся от указателя.Теперь информацию о типе можно получить.Таким образом, std::remove_reference<>::type
приходит на помощь, его type
может указывать на тип, на который ссылается ссылка, который является const char[6]
.Чтобы убедиться в этом, я создал массив const char
с именем arr
, равный const char[6]
без указания длины массива.