استفاده از decltype در std::is_same - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از decltype در std::is_same

+2 امتیاز

من می خوام تعداد اعضای یک وکتور چند بعدی رو بشمارم یک کد بازگشتی نوشتم به این شکل :

#include <iostream>
#include <utility>
#include <type_traits>
#include <vector>
#include <tuple>

template<class T>
int count(const T& vec)
{
    int result=0;
    for(const auto& v : vec)
    {
        if(std::is_same<T,decltype(v)>::value){
            result +=count(v);
        }
        else{
            result+=1;
        }
    }
    return result;
}

int main()
{
    std::vector<std::vector<int>> a(10);
    a[0]=std::vector<int>(10);

    std::cout<<count(a);
}

ولی ارور میده که int  هیچ iterator ای نداره  ( خط for(auto )

در حالیه که من چک هم می کنم اگر تابع وکتور نبود دیگه count صدا زده نشه 

مشکل این کد چیه ؟

سوال شده خرداد 22, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

اول اینکه شما  is_same را با if زمان کامپایل اشتباه گرفتید.یکی از روش ها بدین صورت هستش که هم برای vector و هم برای مقدار تابع تعریف کنید. به صورت زیر :

#include <iostream>
#include <utility>
#include <type_traits>
#include <vector>
#include <tuple>

template<class T>
int count(const T& value){
	return 1;
}
template<class T>
int count(const vector<T>& vec)
{
	int result = 0;
	for (const auto& v : vec)
		result += count(v);
	return result;
}

int main()
{
	std::vector<std::vector<int>> a(10);
	a[0] = std::vector<int>(10);

	std::cout << count(a);
}

 

پاسخ داده شده خرداد 27, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد مرداد 17, 1393 بوسیله ی BlueBlade
...