如何在C ++中从类方法正确返回std :: type_info

时间:2016-12-07 00:37:39

标签: c++ c++11

我有一个类模板,应该可以通过<!DOCTYPE html> <html ng-app="JSONedit"> <head> <script src="https://rawgit.com/mb21/JSONedit/gh-pages/bower_components/jquery/dist/jquery.min.js"></script> <script src="https://rawgit.com/mb21/JSONedit/gh-pages/bower_components/jquery-ui/jquery-ui.min.js"></script> <script src="https://rawgit.com/mb21/JSONedit/gh-pages/bower_components/angular/angular.min.js"></script> <script src="https://rawgit.com/mb21/JSONedit/gh-pages/bower_components/angular-ui-sortable/sortable.min.js"></script> <link href="https://rawgit.com/mb21/JSONedit/gh-pages/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="https://rawgit.com/mb21/JSONedit/gh-pages/css/styles.css" rel="stylesheet" type="text/css" /> <script src="https://rawgit.com/mb21/JSONedit/gh-pages/js/directives.js"></script> </head> <body> <script> 'use strict'; var app = angular.module('exampleApp', ['JSONedit']); function MainViewCtrl($scope, $filter) { $scope.jsonData = { Name: "Joe" }; $scope.$watch('jsonData', function(json) { $scope.jsonString = $filter('json')(json); }, true); $scope.$watch('jsonString', function(json) { try { $scope.jsonData = JSON.parse(json); $scope.wellFormed = true; } catch(e) { $scope.wellFormed = false; } }, true); } </script> <div id="mainView" ng-controller="MainViewCtrl"> <div class="jsonView"> <json child="jsonData" default-collapsed="false" type="object"></json> </div> <hr> <div> <textarea id="jsonTextarea" ng-model="jsonString"></textarea> <span class="red" ng-if="!wellFormed">JSON not well-formed!</span> </div> </div> </body> </html> 返回其模板类型:

std::type_info

但是编译该类会给我以下错误:

错误C2280:&#39; type_info :: type_info(const type_info&amp;)&#39;:尝试引用已删除的函数

我在这里缺少什么想法?

2 个答案:

答案 0 :(得分:4)

该问题与模板无关,因为type_info不可复制而导致问题。您需要的每个type_info对象都已编译到您的程序中,并且typeid()没有创建新对象,它会返回对现有对象的const引用。

您应该GetBeliefType引用const函数返回{/ 1}}函数。

const std::type_info& GetBeliefType() const override

答案 1 :(得分:0)

如果您查看this document,就会发现

  

type_info类既不是CopyConstructible也不是......

因此您无法返回它的副本。错误消息告诉您相同的事情,因为type_info::type_info(const type_info &)确实是您尝试使用的不存在的复制构造函数。

解决方案:您可以返回引用。这是因为

  

typeid表达式是左值表达式,它表示具有静态存储持续时间的对象,多态类型const std :: type_info或从其派生的某种类型。