ফাংশন সংজ্ঞা ঘোষিত ক্লাসের বাইরে ক্লাসের নামটি পুরোপুরি যোগ্য করে তোলা অসম্ভব


12

এই প্রোগ্রামটির ফলাফল একটি অযাচিত পার্সিং লোভকে মৃত-পরিণতিতে পরিণত করেছে:

struct float4x4 {};
class C
{
    float4x4 M();
};

float4x4 ::C::M()
{
    return float4x4{};
}

: 8: 1: ত্রুটি: 'ফ্লোট 4 এক্স 4' তে 'সি' নামে কোনও সদস্য নেই; আপনি কেবল 'সি' বোঝাতে চেয়েছিলেন?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~

ট্রিলিং রিটার্ন টাইপ ব্যবহার করে যা 'ফিক্সড' করা যায়:

auto ::C::M() -> float4x4
{}

এখন সব ভাল।

সুতরাং আমি এটি নিয়েছি শিরোনাম-রিটার্ন-টাইপ ডিক্লেয়ারার সিনট্যাক্স ব্যবহার করার সময় আমরা শ্রেণি-নামটি পুরোপুরি যোগ্যতা অর্জন করতে পারি না?


2
যতক্ষণ সি ++ আশেপাশের শ্বেতক্ষেত্রটিকে উপেক্ষা করবে ততক্ষণ ::আমি মনে করি অন্য কোনও উপায় নেই।
— ইয়াকিসারভিনেন

@ সোমপ্রগ্রামমারডুডে হ্যাঁ, এটিকে দেখুন Godbolt.org/z/mt6GHD
— v.oddou

3
::Cঅংশ অন্য কিছু সমস্যার জন্য একটি ওয়ার্কঅ্যারাউন্ড মত দেখায়। অন্যথায় এটি সহজভাবে হতে পারত C(
— সংকলকটির

2
@ রুস্টিক্স এটি ট্রান্সপ্লেলার দ্বারা কোডের কেবল যান্ত্রিক পুনঃ নির্গমন যা এই অবস্থানে একটি অতি জটিল "নূন্যতম যোগ্য নাম সন্ধান করুন" চালাতে চায় না। একটি এফকিউ-নাম নির্গমন পুরোপুরি লুকোপথ বাইপাস করে এবং এই জাতীয় সরঞ্জামগুলির জন্য সুবিধাজনক।
— v.oddou

উত্তর:


10

আপনি বন্ধ করতে বন্ধনী লাগাতে পারেন:

float4x4 (::C::M)()
{
    return float4x4{};
}

আমি আপনাকে সত্যিই বলতে পারি না কোন নিয়ম এই ঠিক করে তোলে, যদিও এটি বন্ধনী ছাড়া না হয়, যদিও আমি জিসিসি এবং ঝনঝন (উভয় -pedantic) দিয়ে পরীক্ষা করেছি । আমি পেছনের রিটার্ন টাইপ পছন্দ করব।


1
অবিশ্বাস্য। সত্যিই আমরা পারি। Godbolt.org/z/KCFbJZ এটি বিরক্তিকর তবে এটি দুর্দান্ত। অবশ্যই স্টাইলের দিক থেকে পিছনটি দুর্দান্ত। তবে আমার ক্ষেত্রে আমি একটি উপভাষাকে টার্গেট করি যা এটি সমর্থন করে না।
— v.oddou
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.