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


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.