CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

09 August, 2024

C++ Templates - Guarantee A Type Definition Has a Particular Constructor Signature?

 Programing Coderfunda     August 09, 2024     No comments   

#include
#include
#include

struct AppleMakeInfo {};

template class Apple {
static_assert(std::is_base_of::value, "T must be derived from AppleMakeInfo");

public:
std::function deleteFunc;

~Apple() { deleteFunc(); }

Apple(T* aMI) {};
};

template class AppleManager
{
static_assert(std::is_base_of::value, "T must be derived from AppleMakeInfo");
static_assert(std::is_base_of::value, "U must be derived from Apple");

public:

static U* MakeApple(T* aMI, std::function dF)
{
U* ret = new U(aMI);
ret->deleteFunc = dF;
All.push_back(ret);
return ret;
}

private:
AppleManager() {};

static std::vector All;
};

struct GrannySmithMakeInfo :public AppleMakeInfo {};

class GrannySmith :public Apple {};

class GrannySmithManager :public AppleManager {};



The above code block mostly compiles, however I am having trouble with one line causing a compile error:


U* ret = new U(aMI)


This line, during compilation, will show the following error in my IDE (compile error C2665):


'GrannySmith::GrannySmith': no overloaded function could convert all the argument types


To me, this reads like the typename U of the AppleManager template class does not have a constructor with a signature that matches new U(aMI) because nothing in my source indicates a guarantee/contract between AppleManager and whatever Type is provided for typename U for a constructor with the new U(aMI) signature to exist in the definition of the typename U Type. I'd use the where keyword in C# to get this kind of contract, but the closest there is for this in C++ is static_assert() which isn't actually a contract (AFAIK) but just acts the way a contract would at compile.


Assuming I'm understanding correctly and the code won't compile because there's no compiler guarantee that the type provided for typename U will have a constructor with a signature matching new U(aMI), what am I to do to provide this kind of guarantee to the compiler?


Many thanks for any help I get! I'm not so experienced with C++ so apologies if the code block above is embarrassingly amateur.
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Sitaare Zameen Par Full Movie Review
     Here’s a  complete Vue.js tutorial for beginners to master level , structured in a progressive and simple way. It covers all essential topi...
  • Writing and debugging Eloquent queries with Tinkerwell
    In this article, let's look into the options that you can use with Tinkerwell to write and debug Eloquent queries easier. The post Wr...
  • The token request was rejected by the remote server
    error:invalid_granterror_description:The token request was rejected by the remote server.error_uri: https://documentation.openiddict.com/err...
  • Laravel Search String
      Laravel Search String is a package by   Loris Leiva   that generates database queries based on one unique string using a simple and custom...
  • AI foot tracking model
    I am a student doing a graduation project. I urgently need to deal with this model (I am attaching a link). I've never worked with pytho...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda